Проблема такая пытаюсь вывести данные на LCD 16х2 дисплей отрисовываю данные первые данные это должна быть температура и влага в доме потом дисплей чистится и выводятся температура и влага на улице потом снова чистится и выводится атмосферное давление на улице. если первое два работает с задержкой 5 сек то давление не выводит на экран точнее выводи но мгновенно сменяется на данные в доме. можно использовать delay() но не хочу потому что нужно будет прикрутить вебсервер. микроконтроллер node mcu v3(esp8266) ниже листинг
C++:
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
uint8_t temp_cel[8] ={B00111,B00101,B00111,B00000,B00000,B00000,B00000};// цельсии
#define home_INTERVAL 5000UL // Интервал обновлерия
bool homes=true;
bool wind=false;
bool presssi=false;
void setup() {
// init display
lcd.begin(16,2);
lcd.init();
lcd.backlight();
// init display end
}
void print_data_home(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp hom:");
lcd.setCursor(10, 0);
lcd.print(" 26C");//
lcd.print((char)223);
lcd.setCursor(0, 1);
lcd.print("humidity hom:");
lcd.setCursor(13, 1);
lcd.print("70%");
}
void wind_show(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp:");
lcd.setCursor(5, 0);
lcd.print(" 26 C");//temp window
lcd.print((char)223);
lcd.setCursor(0, 1);
lcd.print("humidity:");// humidity window
lcd.setCursor(9, 1);
lcd.print("70%");
}
void press_show(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pressure:");// humidity window
lcd.setCursor(9, 0);
lcd.print("70 mm.hg");
}
void loop() {
// обновление каждые 5 сек
static unsigned long upd_timer = 0;
if (millis() - upd_timer > home_INTERVAL) {
/*
делал с помощью так называемого флага три переменной и каждая отвечает за свою функцию
и должна вызываться функция только когда флаг равен истине
*/
if(presssi==true){
press_show();
presssi=false;
wind=false;
homes=true;
upd_timer = millis(); //сбросить таймер
delay(1);
}
if(wind==true){
wind_show();
homes=false;
wind=false;
presssi=true;
upd_timer = millis(); //сбросить таймер
}
if(homes==true){
print_data_home();
wind=true;
homes=false;
presssi=false;
upd_timer = millis(); //сбросить таймер
}
}
}