Мерцание экрана при обновлении данных

Glinka0
Offline
Зарегистрирован: 13.03.2017

Добрый вечер.Как вывести на экран данные температуры без их мерцания,т.е. при обновлении данных выглядит такhttps://www.youtube.com/watch?time_continue=5&v=6DnYPrg-OfU

 

 #include <TFT.h>
   #include <OneWire.h>
   #include <DallasTemperature.h>

   #define CS   10
   #define DC   9
   #define RESET  8
 
   TFT Screen = TFT(CS, DC, RESET);
 

   OneWire oneWire(7); // вход датчиков 18b20
   DallasTemperature ds(&oneWire);

   DeviceAddress sensor1 = {0x28, 0xFF, 0xEA, 0x6A, 0x63, 0x16, 0x4, 0xC2};   //28 FF EA 6A 63 16 4 C2  объявляем номера датчиков
   //DeviceAddress sensor2 = {0x28, 0xE6, 0xBD, 0x3B, 0x05, 0x0, 0x0, 0xCF};





void setup() {
   Serial.begin(9600);
   ds.begin();  // инициализируем датчики

   Screen.begin(); // инициализируем дисплей 
               
    
}

void loop() {
  
   Screen.background(0,0,0);  //заливаем фон чёрным  
   ds.requestTemperatures(); // считываем температуру с датчиков
      
   float Temp=ds.getTempC(sensor1); 
   char myStr[6]; 
   dtostrf(Temp, 2, 1, myStr);   //переводим показания температуры датчика из float в строку
     
    
   Serial.print(ds.getTempC(sensor1)); // отправляем температуру
   Serial.println("C");
   Serial.println("=========================================================");

   Screen.stroke(255,255,255); //белый цвет кисти
   Screen.text(myStr,0,0); // отправляем температуру на экран

   delay(1000);
}

 

negavoid
Offline
Зарегистрирован: 09.07.2016

Нужно не перерисовывать весь экран каждый loop, а закрашивать цветом фона только ту область, куда выводится текст. То есть перенести Screen.background в конец setup, а вместо него делать Screen.fillrect(0,0,240,30) (или как оно там в этой библиотеке называется). Если всё ещё не хватает быстродействия - закрашивать только то место, куда выводятся секунды, раз в минуту - минуты, раз в час - часы.

Glinka0
Offline
Зарегистрирован: 13.03.2017
   #include <TFT.h>
   #include <OneWire.h>
   #include <DallasTemperature.h>

   #define CS   10
   #define DC   9
   #define RESET  8
 
   TFT Screen = TFT(CS, DC, RESET);
 

   OneWire oneWire(7); // вход датчиков 18b20
   DallasTemperature ds(&oneWire);

   DeviceAddress sensor1 = {0x28, 0xFF, 0xEA, 0x6A, 0x63, 0x16, 0x4, 0xC2};   //28 FF EA 6A 63 16 4 C2  объявляем номера датчиков
   //DeviceAddress sensor2 = {0x28, 0xE6, 0xBD, 0x3B, 0x05, 0x0, 0x0, 0xCF};





void setup() {
   Serial.begin(9600);
   ds.begin();  // инициализируем датчики

   Screen.begin(); // инициализируем дисплей 
               
       
}

void loop() {
  

    
     
  
     
   ds.requestTemperatures(); // считываем температуру с датчиков
      
   float Temp=ds.getTempC(sensor1); 
   char myStr[6]; 
   dtostrf(Temp, 2, 1, myStr);   //переводим показания температуры датчика из float в строку
     
    
   Serial.print(ds.getTempC(sensor1)); // отправляем температуру
   Serial.println("C");
   Serial.println("=========================================================");

   Screen.stroke(0, 0, 0); //чёрный цвет кисти
   Screen.fill(0, 0, 0); //цвет заливки -чёрный 
   Screen.rect(0, 0, 25, 8); //прямоугольник перекрывающий температуру
   Screen.stroke(255,255,255); //белый цвет кисти
   Screen.text(myStr,0,0); // отправляем температуру на экран

   delay(1000);
}

Усё разобрался,в коде кроме полного закрашивания был ещё один косяк-я сначала стираю данные,потом запрашиваю данные температуры,а это занимает 750мс.,вот.Спасибо за совет

Glinka0
Offline
Зарегистрирован: 13.03.2017

И ещё ,дабы не создавать много тем.Когда датчик начинает выдавать показания с минусом,он смещает текст вправо.

Как выделить место перед переменной,чтобы текст всегда оставался на одном месте?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Если неотрицательно, то печатайте пробел перед числом, а если отрицательно - не печатайте, это место минус займёт.

Glinka0
Offline
Зарегистрирован: 13.03.2017

В этом-то и вопрос,как это сделать?

Т.е. пишем функцию, if значение больше 0,то в массив добавляем пробел,else ничего не добавляем,так?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

if больше или равно нулю, выводим пробел.

Glinka0
Offline
Зарегистрирован: 13.03.2017

Понял,спасибо.