Мерцание экрана при обновлении данных
- Войдите на сайт для отправки комментариев
Чт, 31/08/2017 - 22:04
Добрый вечер.Как вывести на экран данные температуры без их мерцания,т.е. при обновлении данных выглядит так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); }
Нужно не перерисовывать весь экран каждый loop, а закрашивать цветом фона только ту область, куда выводится текст. То есть перенести Screen.background в конец setup, а вместо него делать Screen.fillrect(0,0,240,30) (или как оно там в этой библиотеке называется). Если всё ещё не хватает быстродействия - закрашивать только то место, куда выводятся секунды, раз в минуту - минуты, раз в час - часы.
Усё разобрался,в коде кроме полного закрашивания был ещё один косяк-я сначала стираю данные,потом запрашиваю данные температуры,а это занимает 750мс.,вот.Спасибо за совет
И ещё ,дабы не создавать много тем.Когда датчик начинает выдавать показания с минусом,он смещает текст вправо.
Как выделить место перед переменной,чтобы текст всегда оставался на одном месте?
Если неотрицательно, то печатайте пробел перед числом, а если отрицательно - не печатайте, это место минус займёт.
В этом-то и вопрос,как это сделать?
Т.е. пишем функцию, if значение больше 0,то в массив добавляем пробел,else ничего не добавляем,так?
if больше или равно нулю, выводим пробел.
Понял,спасибо.