Подскажите как реализовать скетч обновления информации на экране 1.8" 128*160 (st7735) с максимальной частотой. Используется Arduino UNO, библиотека Adafruit-ST7735, хардварный SPI и библиотека CyberLib.h При использовании команды tft.fillScreen(ST7735_BLACK) - экран мерцает. Вычитал на форумах, чтоне обязательно очищать полностью экран, а затирать старую информацию "пробелами". Пробелами у меня не получилось и пришлось затирать командами: Код (Text): tft.fillScreen(ST7735_BLACK); tft.setCursor(70,32); tft.println("\x08\x08\x08\x08"); tft.setCursor(70,32); tft.println("\x07\x07\x07\x07"); Помогите оптимизировать скетч чтобы на экране информация не мерцала. Может есть возможность ограничить количество цветов до 2 (черный-белый). Код (Text): void setup() { tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab StartSPI(0, 2, 1); tft.fillScreen(ST7735_BLACK); tft.setTextSize(2); tft.setCursor(0,0); tft.setTextColor(ST7735_RED); tft.println("TEMP"); tft.setCursor(0,16); tft.setTextColor(ST7735_YELLOW); tft.println("TEMP2"); tft.setCursor(0,32); tft.setTextColor(ST7735_GREEN); tft.println("TEMP3"); tft.setTextColor(ST7735_BLUE); tft.setCursor(0,48); display.println("TEMP4"); } void loop() { tft.setTextSize(2); tft.setTextColor(ST7735_BLACK); /////затираю числа на экране tft.setCursor(70,0); tft.println("\x08\x08\x08\x08"); tft.setCursor(70,0); tft.println("\x07\x07\x07\x07"); tft.setCursor(70,16); tft.println("\x08\x08\x08\x08"); tft.setCursor(70,16); tft.println("\x07\x07\x07\x07"); tft.setCursor(70,32); tft.println("\x08\x08\x08\x08"); tft.setCursor(70,32); tft.println("\x07\x07\x07\x07"); tft.setCursor(70,48); tft.println("\x08\x08\x08\x08"); tft.setCursor(70,48); tft.println("\x07\x07\x07\x07"); /////////////////// tft.setTextColor(ST7735_RED); tft.setCursor(70,0); tft.println(A0_Read); tft.setTextColor(ST7735_YELLOW); tft.setCursor(70,16); tft.println(A1_Read); tft.setTextColor(ST7735_YELLOW); tft.setCursor(70,32); tft.println(A2_Read;); tft.setTextColor(ST7735_GREEN); tft.setCursor(70,48); tft.println(A3_Read);
Так форумы устроены. Значит или тема никому не интересна или никто с этим дисплеем на тот момент не возился или не попалась на глаза тема челу, который с удовольствием бы ответил)))))
не надо использовать очистку всего экрана - это долго... у меня тоже подобный экран (128*128 только) и тоже надо было текстовку обновлять в библиотеке есть команды на рисование прямоугольника по координатам и размерам - так вот, если надо обновить информацию на экране - то перед выводом новой, просто на месте старой рисуйте прямоугольник в цвет фона Это значительно быстрее и хоть мерцание остается, но уже куда в меньшей степени Код (C++): tft.fillRoundRect(10, 10, 85, 220, 7, 0xFF76); (от левого края, от верха, ширина, высота, радиус углов скругления, цвет RGB656)
а да, если надо кирилицей писать Код (C++): char *utf8rus(char *source) { int i,j,k; unsigned char n; char m[2] = { '0', '\0' }; strcpy(target, ""); k = strlen(source); i = j = 0; while (i < k) { n = source[i]; i++; if (n >= 0xC0) { switch (n) { case 0xD0: { n = source[i]; i++; if (n == 0x81) { n = 0xA8; break; } if (n >= 0x90 && n <= 0xBF) n = n + 0x30; break; } case 0xD1: { n = source[i]; i++; if (n == 0x91) { n = 0xB8; break; } if (n >= 0x80 && n <= 0x8F) n = n + 0x70; break; } } } m[0] = n; strcat(target, m); j++; if (j >= maxString) break; } return target; } и вот так вызывать Код (C++): tft.println(utf8rus("МОРОЗИЛЬНАЯ КАМЕРА"));