Обновление данных на экране

Здравствуйте, написал небольшой код, где считываю данные с датчиков и вывожу их на lcd экран, потом добавил энкодер чтобы было удобно переключаться между датчиками, и тут появилась проблема в том что данные на экране не обновляются.

void setup() {
  Serial.begin(9600);
  Wire.begin();

  lcd.init();       // Инициализация lcd
  lcd.backlight();  // Включаем подсветку
  lastStateCLK = digitalRead(CLK);
}
void loop() {
   // Считываем текущее состояние CLK
  currentStateCLK = digitalRead(CLK);
  if (currentStateCLK != lastStateCLK && currentStateCLK == 1) {
    if (digitalRead(DT) != currentStateCLK) {
      value--;
        lcd.clear();
    } else {
      value++;
      lcd.clear();
    }
    if (value > 4 || value < -4) {
    value = 0;
    lcd.clear();
    delay(1);
  }
 

  if (value == 0) {
  //данные с первого датчика

  }

  if (value == -1 || value == 1) {
     //данные со второго датчика
  }

  if (value == -2 || value == 2) {
  //данные с третьего датчика
  }
 
  if (value == -3 || value == 3) {
  //данные с четвертого датчика
    delay(1);
  }

  if (value == -4 || value == 4) {
   //данные с пятого датчика
    }
    delay(1);
  }

  }

  // Запоминаем последнее состояние CLK
  lastStateCLK = currentStateCLK;

  delay(1);
}  
 ```  может кто нибудь знает как решить данную проблему, Заранее спасибо!!!

А где вывод на экран? Очистку вижу. Вывода нет.

#include "GyverEncoder.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHT.h"
#include <RTClib.h>
#define DHTPIN D4  
#define DHTPIN1 D3
#define solPin D7
#define smokePin A0
#define CLK D6
#define DT D5
int value = 0;
int currentStateCLK;
int lastStateCLK;
DHT dht(DHTPIN, DHT22);  
DHT dht1(DHTPIN1, DHT11);
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int pinD0 = D0;  
int sol, minsol = 200, sensorThres = 500;
RTC_DS3231 rtc;
char tim[32];

void setup() {
  Serial.begin(9600);
  Wire.begin();
  rtc.begin();
  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  dht.begin();
  dht1.begin();
  pinMode(solPin, INPUT);
  lcd.init();       
  lcd.backlight();  
 pinMode(CLK, INPUT);
  pinMode(DT, INPUT);
  lastStateCLK = digitalRead(CLK);
}
void loop() {
  currentStateCLK = digitalRead(CLK);
  if (currentStateCLK != lastStateCLK && currentStateCLK == 1) {
    if (digitalRead(DT) != currentStateCLK) {
      value--;
        lcd.clear();

    } else {
      value++;
      lcd.clear();
    }
    if (value > 4 || value < -4) {
    value = 0;
    lcd.clear();
    delay(1);
  }
 

  if (value == 0) {
    float h = dht.readHumidity();      
    float t = dht.readTemperature();    
    float hh = dht1.readHumidity();  
    float tt = dht1.readTemperature();  

    lcd.setCursor(0, 0);
    lcd.print("Humidity1: ");  
    lcd.setCursor(10, 0);
    lcd.print(h);
    lcd.setCursor(0, 1);         
    lcd.print("Temperature1: ");
    lcd.setCursor(13, 1);  
    lcd.print(t);
    lcd.setCursor(0, 2);
    lcd.print("Humidity2: ");
    lcd.setCursor(11, 2); 
    lcd.print(hh);
    lcd.setCursor(0, 3);          
    lcd.print("Temperature2: ");
    lcd.setCursor(13, 3);  
    lcd.print(tt);
    delay(1);

  }
  if (value == -1 || value == 1) {
    int xD0;
    lcd.clear();
    xD0 = digitalRead(pinD0);
    if (xD0 == HIGH) 
    {
      lcd.setCursor(0, 0);
      lcd.print("illumination ON");  
    } else {
      lcd.setCursor(0, 0);
      lcd.print("illumination OFF"); 
    }
    delay(1);
  }
  if (value == -2 || value == 2) {
    sol = analogRead(solPin);
    lcd.print("uroven_vlagi= "); 
    lcd.print(sol);             
    lcd.setCursor(0, 1);
    if (sol > minsol) { lcd.print("Pocva_suhaya"); }
    if (sol < minsol) { lcd.print("Pocva_vlazhnaya"); }
    delay(1);
  }
  if (value == -3 || value == 3) {
    int analogSensor = analogRead(smokePin);  
    lcd.print("uroven_gaza= ");          
    lcd.print(analogSensor);                
    lcd.setCursor(0, 1);
    if (analogSensor > sensorThres) {  
      lcd.print(" Gaz!");             
    } else {                          
      lcd.print(" normal");           
    }
    delay(1);
  }
  if (value == -4 || value == 4) {
    lcd.print(F("   Time:   Date:"));
    lcd.setCursor(0, 2);

    for (int i = 0; i < 5; i++) {
      DateTime now = rtc.now();
      sprintf(tim, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year());
      lcd.setCursor(0, 2);
      lcd.print(tim);
    }
    delay(1);
  }
   Serial.println(value);
  }
  lastStateCLK = currentStateCLK;

  delay(1);
}
``` вот весь код
  1. Выведите на экран величину value.
  2. Обсуждать код без схемы бессмысленно.

Думаю, что он на lcd.clear просто клики теряет.

Я подключил энкодер, при повороте энкодера влево или вправо выводятся данные с определенного датчика, допустим открываю датчик реального времени, у меня появляется время но секунды минуты и т.д. не обновляются потому что этого не дает сделать вот это условие if (currentStateCLK != lastStateCLK && currentStateCLK == 1) так как энкодер не меняет свое положение, тут получается я сравниваю текущее положение энкодера с предыдущим, если они не равны то значение value уменьшается или увеличивается смотря в какую сторону повернули энкодер и дальше отталкиваясь от значения value считываются значения с датчика, но больше считываний с датчика не происходит так как условие не дает и получается что время у меня стоит на месте, а хочется чтобы было видно как тикают секунды минуты и т.д.

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

Энкодер без lcd работает?

Попробуйте строки 56-59 вставить сразу после 37 строки

да работает

не работает так как вывод на экран все равно происходит только один раз