Я выводил данные на жк дисплей и у меня возникла проблема что в будущем на нём не останется места от данных других датчиков ,я решил подключить кнопку для управления, всё было нормально, я не замечал того что когда я например нажимаю раз на кнопку и меня стирается всё с экрана и выводиться температура и влажность, но она не обновляется что бы её обновить нужно ещё раз нажать на кнопку. что надо дописать? или переделать. Код (C++): #define PIN 3 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TroykaDHT.h> #include "GyverButton.h" GButton butt1(PIN); DHT dht(A1, DHT22); LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display // создаем свой символ и присваиваем ему имя "simvol" byte simvol[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 }; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); Serial.begin(9600); dht.begin(); lcd.backlight(); lcd.setCursor(0,1); lcd.print(" Smart"); lcd.backlight(); lcd.setCursor(0,0); lcd.print(" Maksim Grib"); delay(5000); lcd.clear(); } void loop(){ butt1.tick(); lcd.createChar(1, simvol); dht.read(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("22:11:41"); //типа время ещё датчики не приехали if (butt1.hasClicks()) { byte clicks = butt1.getClicks(); switch (clicks) { case 1: вот здесь крч не обновляется инфа lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(dht.getTemperatureC()); lcd.backlight(); lcd.setCursor(5,0); lcd.print(char(1)); lcd.backlight(); lcd.setCursor(0,1); lcd.print(dht.getHumidity()); lcd.backlight(); lcd.setCursor(5,1); lcd.print("%"); break; case 2: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("36.6C"); //типа температура ещё датчики не приехали break; case 3: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("765"); //типа давление ещё датчики не приехали lcd.backlight(); lcd.setCursor(0,1); lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали break; case 4: lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("OFF DISPLEY"); delay(2000); lcd.clear(); lcd.noDisplay(); break; case 5: lcd.display(); lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("ON DISPLEY"); delay(2000); lcd.clear(); break; } } }
Заведите переменные для влажности и температуры и обновляйте эти переменные на экране. А рассчитывайте значения в loop отдельно
Код (C++): void loop(){ float hum = dht.getHumidity(); float temp = dht.getTemperatureC(); butt1.tick(); lcd.createChar(1, simvol); dht.read(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("22:11:41"); //типа время ещё датчики не приехали if (butt1.hasClicks()) { byte clicks = butt1.getClicks(); switch (clicks) { case 1: вот здесь крч не обновляется инфа lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(temp); lcd.backlight(); lcd.setCursor(5,0); lcd.print(char(1)); lcd.backlight(); lcd.setCursor(0,1); lcd.print(hum); lcd.backlight(); lcd.setCursor(5,1); lcd.print("%"); break; case 2: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("36.6C"); //типа температура ещё датчики не приехали break; case 3: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("765"); //типа давление ещё датчики не приехали lcd.backlight(); lcd.setCursor(0,1); lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали break; case 4: lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("OFF DISPLEY"); delay(2000); lcd.clear(); lcd.noDisplay(); break; case 5: lcd.display(); lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("ON DISPLEY"); delay(2000); lcd.clear(); break; } } }
Код, конечно, дичь. Нужно дописать код тормозов если кол-во кликов достигло 5 Код (C++): #define PIN 3 #include <Wire.h> #include <LiquidCrystal_I2C.h> #include <TroykaDHT.h> #include "GyverButton.h" GButton butt1(PIN); DHT dht(A1, DHT22); LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 16 chars and 2 line display // создаем свой символ и присваиваем ему имя "simvol" byte simvol[8] = { 0b01100, 0b10010, 0b10010, 0b01100, 0b00000, 0b00000, 0b00000, 0b00000 }; byte clicks=1; void setup() { lcd.init(); // initialize the lcd lcd.backlight(); Serial.begin(9600); dht.begin(); lcd.backlight(); lcd.setCursor(0,1); lcd.print(" Smart"); lcd.backlight(); lcd.setCursor(0,0); lcd.print(" Maksim Grib"); delay(5000); lcd.clear(); } void loop(){ butt1.tick(); lcd.createChar(1, simvol); dht.read(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("22:11:41"); //типа время ещё датчики не приехали if (butt1.hasClicks()) clicks = butt1.getClicks(); switch (clicks) { case 1: вот здесь крч не обновляется инфа lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print(dht.getTemperatureC()); lcd.backlight(); lcd.setCursor(5,0); lcd.print(char(1)); lcd.backlight(); lcd.setCursor(0,1); lcd.print(dht.getHumidity()); lcd.backlight(); lcd.setCursor(5,1); lcd.print("%"); break; case 2: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("36.6C"); //типа температура ещё датчики не приехали break; case 3: lcd.clear(); lcd.backlight(); lcd.setCursor(0,0); lcd.print("765"); //типа давление ещё датчики не приехали lcd.backlight(); lcd.setCursor(0,1); lcd.print("2M"); //типа высота на уровнем моря ещё датчики не приехали break; case 4: lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("OFF DISPLEY"); delay(2000); lcd.clear(); lcd.noDisplay(); break; case 5: lcd.display(); lcd.clear(); lcd.backlight(); lcd.setCursor(3,0); lcd.print("ON DISPLEY"); delay(2000); lcd.clear(); break; } }
Он в доработки, и вообще, он здесь не для того что бы его критиковали, а что бы помогли, если что-то не так подсказали, что переделать.