Устранить мерцание статических надписей lcd 1.8 spi arduino 1.0.5 при считывании температуры с lm75

gudvin
Offline
Зарегистрирован: 14.08.2015

Не могу сообразить как сделать так чтобы статические надписи не мерцали при обновлении экрана, если убрать обновление экрана то показания температуры накладываются друг на друга, поэтому приходится при каждом цикле обновлять экран, соответственно весь экран моргает.

#include <TFT.h>  // Arduino LCD library
#include <SPI.h>
#include  <Wire.h>
int temp_address = 72;

#define cs   10
#define dc   9
#define rst  8  

TFT TFTscreen = TFT(cs, dc, rst);
void setup() {
     Serial.begin(9600);
     Wire.begin();
    TFTscreen.begin();
  }
void loop() {
  TFTscreen.background(0, 0, 0);
  TFTscreen.stroke(255,255,255);
  TFTscreen.setTextSize(1);
  TFTscreen.text("Read Temp From LM75 ",0,0);
  TFTscreen.setTextSize(2);
  TFTscreen.stroke(255,255,255);
  TFTscreen.text("temp=:", 0, 20);
         
  Wire.beginTransmission(temp_address); //Start talking
  Wire.write(0); //Ask for Register zero
  Wire.endTransmission(); //Complete Transmission
  Wire.requestFrom(temp_address, 2); //Request 2 Byte
  while(Wire.available() == 0); //wait for response
  int c = Wire.read();
  Serial.print(c);
  Serial.println("C");
 
   TFTscreen.print(c);
   delay(5000);
  }

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

Как вариант выводить сначало квадрат с заливкой фона, а потом результат. 

Типа так:

tft.fillRect(0, 100, 144, 25, BLACK) - координаты подобрать свои

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Мне кажется, ТС спрашивал, как уменьшаить мерцание, а не как его увеличить.

А для уменьшения принцип простой - не выводить ничего лишнего.

Весь статический текст выводится в setup, а в loop - только то, что изменяется.

Символы, естественно, выводить с непрозрачным фоном и ведущими пробелами.

Famous
Offline
Зарегистрирован: 05.01.2022

Как вывести символ с непрозрачным фоном?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

По-разному можно.

Обычно в библиотеке для этого есть специальная функция или режим.

Ну а если нет - дописать свою.

А если дописать свою не по силам - сначала рисуем на месте символа прямоугольник цветом фона, а потом поверх него - символ.

Famous
Offline
Зарегистрирован: 05.01.2022

Почитал про это дело... В общем для стандартного шрифта (по умолчанию для дисплея) можно указать цвет фона символов вторым аргументов цвета текста, например:

tft.setTextColor(ST77XX_GREEN,ST77XX_BLACK);

А вот для любого другого шрифта (хотя они лежат внутри библиотеки) так не работает и фон не рисуется... А отрисовка прямоугольника или вывод того же текста, но в цвет фона - вызывает мерцание...

Попробую найти как это работает в библиотеке для стандартного шрифта и переделать под любой...

b707
Offline
Зарегистрирован: 26.05.2017

Просто не переделаете. Авторы либы не просто так оставили фонты без фона. Это не так то просто.

Кстати, вывод фонта с фоном и прорисовка прямоугольника под текст - в смысле мерцания одно и тоже, так что не плодите сложностей, делайте как проще.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018