Вывести переменную на дисплей 1.8*

Здравствуйте! Не могу понять как корректно вывести значение переменной на дисплей 1.8 128*160. Библиотека “TFT” из IDE не убирает предыдущий символ, и последующий накладывается на предыдущий. В LCD1602 такой проблемы не было. Даже функции очистки дисплея не нашел. Может подскажете как решить проблему ? В идеале без полной очистки дисплея ( пробовал перед выводом нового символа выводить пробел, чет не сработало).

https://www.arduino.cc/reference/en/libraries/tft/

#include <TFT.h>                 
#include <SPI.h>                
 
#define cs   10                 
#define dc   9                   
#define rst  8                   
 
TFT TFTscreen = TFT(cs, dc, rst);

float fps = 0.43;
 
void setup() 
{
  TFTscreen.begin();
  TFTscreen.background(0, 0, 0); 
  TFTscreen.setTextSize(3);     
  TFTscreen.setRotation(3);
  TFTscreen.background ( 0 , 0 , 0 );
  TFTscreen.stroke(255, 255, 255);

  //TFTscreen.text("> DISABLE", 0, 0);
  //TFTscreen.text("  MEANDER", 0, 27);
  //TFTscreen.text("  15625.4 Hz", 0, 54);
  //TFTscreen.text("  423.8 Hz", 0, 81);
  //TFTscreen.text("  5.8 V", 0, 108);
}
 
void loop() 
{
    TFTscreen.setCursor(0,0);
    TFTscreen.print(fps);
    fps++;
    delay(1000);
    TFTscreen.text(" ", 0, 0);
   
    // text
    // print
    // write
}

Рисуйте прямоугольник закрашенный фоном ! Пробел не поможет !

Спасибо огромное, помогло!

void loop() 
{
  while (millis() > 5000 && millis() < 6000)
  {
    TFTscreen.stroke(255, 255, 255);
    TFTscreen.setCursor(0,0);
    TFTscreen.print(fps);
    fps++;
    TFTscreen.fill(0,0,0);
    TFTscreen.stroke(0, 0, 0);
    TFTscreen.rect(0,0,100,21);
  }
    TFTscreen.stroke(255, 255, 255);
    TFTscreen.setCursor(0,0);
    TFTscreen.print(fps);
    
    // text
    // print
    // write
}

получилось 44 кадра в секунду, не знаете как можно поднять частоту ? может есть библиотека полегче ?

Дело не в библиотеке (хотя, бывает и в библиотеке тоже), а в способе вывода.
Если хотите выводить символы быстро, нужно избавиться от:

  1. Попиксельного вывода.
  2. От вывода закрашенного прямоугольника.

Т.е. выводить весь символ вмести с фоном за один проход.
Именно под такой способ вывода символа аппаратно оптимизирован дисплей.
Но разработчики библиотек для дисплеев решили извратиться и сделали по умолчанию самый бестолковый режим.

Могу порекомендовать действовать в такой последовательности.

  1. Ищите в используемой Вами библиотеке способ выводить символы сразу с непрозрачным фоном.
  2. Если такового найти не удалось, меняйте библиотеку.
  3. Если подходящей библиотеки найти не удалось, пишите функцию вывода символа сами.

PS. Лично я предпочитаю 3-й вариант.

Я обычно перед выводом нового значения, выводу старое, но цветом фона

И чем это отличается от вывода квадратика ? Квадратик выводится одним вызовом установки границ и потом одним массивом выводится цвет. Шрифт же выводится через DrawPixel - ДЛЯ КАЖДОГО пикселя вызывается установка границ и выводится цвет ОДНОГО пикселя. Если шрифт плотный, то это может быть в РАЗЫ дольше чем закраска квадратика.

На редкость неоптимальное решение.

хм… а зачем?
Речь ведь не идет о частоте сканирования дисплея - которая чем больше, чем лучше для глаз.
В Вашем случае вы пытаетесь вывести на экран новое значение взамен старого. Для чего может понадобится обновлять данные даже 10 раз в секунду, не говоря уже о 44… ??
Кто сможет разглядеть такую быструю смену цифр?

44 FPS при выводе одного значения, при выводе 12 отдельных элементов текста и переменных частота падает до 3 - 4 и все это неприятно мерцает. На библиотеке UTFT не приходится закрашивать перед выводом нового значения, на одну переменную 35 FPS вышло, на 12 элементов все те же 4 кадра. Крутя ручку хотелось бы более быстрой смены изображения, та и проц нужен для других задач помимо дисплея.

Смените ардуину на более быструю

так более быстрая уже DUE, а у меня корпус под NANO влезет только. STM32 может попробую разобраться.

гуглите BluePill, BlackPill.

ну вы скажете… почти любая ардуино быстрее Наны :slight_smile:

стм32, есп32, рп2040… да мало ли что еще.
Вон хоть китайскую Air103 возьмите - она размером практически как Нано

1 лайк

Учитесь правильно выводить - на старом форуме подобный дисплей полностью перерисовывали с 22+ кадрами

87 fps stm32
https://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/st7735-160-na-128-podsvetka-barakhlit?page=12#comment-671051

11 кадров адафрут библиотекой
https://arduino.ru/forum/pesochnitsa-razdel-dlya-novichkov/st7735-160-na-128-podsvetka-barakhlit?page=11#comment-670339
На arduino nano

1 лайк

Так в космосе рыб и черепах не было просто…

не могли они на этом железе считать траекторию, откинем их эфемериды занимающие более 100 мегабайт будем считать что у них есть какой-то секретный рассчётный блок

Могли. Я даже знаю, как это делается.