Спасибо за подсказку. Почти так и сделал, только буфер последовательного порта > 128 байт не получается применить - не работает. Но даже с буфером 126 байт скорость вывода получилась практически теоретически достижимая. На 115200 - около 7 сек. На 256000 (оказывается ардуинка и такую скорость поддерживает!!!) - около 4 сек. Эксперименты с выводом картинки завершил
PHP код:
#include <S65Display.h>
S65Display lcd;
byte volatile data[126]; //массив входных данных
int n=0, nbuf=126; // индекс массива, размер буфера
byte x=1, y=1; // текущие координаты
void setup(){
//init LCD
lcd.init(4); //spi-clk = Fcpu/4
//clear screen
lcd.clear(RGB(0,0,0));
Serial.begin(256000);
}
void loop(){
if (Serial.available() == nbuf) {
for (int i = 0; i < nbuf; i++) data[i] = Serial.read(); // прочитать данные из порта в массив
for (int i = 0; i < nbuf/3; i++) {
lcd.drawPixel(x ,y ,RGB(data[n],data[n+1],data[n+2])); // вывод пикселя на экран
x++; // увеличиваем значение X
n = n + 3;
if (n > nbuf-1) n = 0;
if (x > 176) {
x = 1;
y++; // увеличиваем значение Y
}
}
}
}