DHT11 + LCD keypad + Menu : temperatura e umidade nao mudam dentro do menu

boa tarde,

Sou novato no fórum e na programação do Arduíno, estou montando um sistema de controle de temperatura e umidade, e para isso vou usar um Arduíno mega, alguns sensores DHT11 e uma placa de reles.

Estou montando um menu, onde mostrarei as temperaturas e umidades de cada setor, mas logo no inicio me deparei com um problema :

As informações de temperatura e umidade mostradas dentro do menu estão estáticas, não estão em tempo real, apenas vejo a temperatura no momento que o menu foi acionado.

Gostaria de uma ajuda, para encontrar uma forma de ter esses valores em tempo real.

#include <DHT.h> //Carrega a biblioteca DHT
//Define a ligação ao pino de dados do sensor

#define HT01 A1 // pino que estamos conectado
#define HT02 A2 // pino que estamos conectado
#define HT03 A3 // pino que estamos conectado
#define HT04 A4 // pino que estamos conectado
#define HT05 A5 // pino que estamos conectado
#define HT06 A6 // pino que estamos conectado
#define HT07 A7 // pino que estamos conectado
#define HT08 A8 // pino que estamos conectado
#define HT09 A9 // pino que estamos conectado

#define DHTTYPE DHT11

DHT dht1 (HT01, DHTTYPE);
DHT dht2 (HT02, DHTTYPE);
DHT dht3 (HT03, DHTTYPE);
DHT dht4 (HT04, DHTTYPE);
DHT dht5 (HT05, DHTTYPE);
DHT dht6 (HT06, DHTTYPE);
DHT dht7 (HT07, DHTTYPE);
DHT dht8 (HT08, DHTTYPE);
DHT dht9 (HT09, DHTTYPE);

#include <LiquidCrystal.h>
LiquidCrystal lcd(8,9,4,5,6,7);

int keypad_pin = A0;
int keypad_value = 0;
int keypad_value_old = 0;

char btn_push;

byte mainMenuPage = 1;
byte mainMenuPageOld = 1;
byte mainMenuTotal = 13;

//Array simbolo grau
byte grau[8] ={ B00001100,
B00010010,
B00010010,
B00001100,
B00000000,
B00000000,
B00000000,
B00000000,};

void setup()
{
dht1.begin();
dht2.begin();
dht3.begin();
dht4.begin();
dht5.begin();
dht6.begin();
dht7.begin();
dht8.begin();
dht9.begin();

lcd.begin(16,2); //Initialize a 2x16 type LCD
lcd.createChar(0, grau);//Cria o caractere customizado com o simbolo do grau

MainMenuDisplay();
delay(1000);
}
void loop()
{
btn_push = ReadKeypad();

MainMenuBtn();

if(btn_push == ‘S’)//enter selected menu
{
WaitBtnRelease();
switch (mainMenuPage)
{
case 1:
MenuA();
break;
case 2:
MenuB();
break;
case 3:
MenuC();
break;
case 4:
MenuD();
break;

}

MainMenuDisplay();
WaitBtnRelease();
}

delay(10);

}//--------------- End of loop() loop ---------------------
void MenuA()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Inside Menu A”);

while(ReadKeypad()!= ‘L’)
{
//Insert Task for Menu A here

}
}
void MenuB()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Inside Menu B”);

while(ReadKeypad()!= ‘L’)
{
//Insert Task for Menu B here

}
}
void MenuC()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Inside Menu C”);

while(ReadKeypad()!= ‘L’)
{
//Insert Task for Menu C here

}
}
void MenuD()
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Inside Menu D”);

while(ReadKeypad()!= ‘L’)
{
//Insert Task for Menu D here

}
}
}
}
void MainMenuDisplay()
{
lcd.clear();
lcd.setCursor(0,0);
switch (mainMenuPage)
{
case 1:
{
lcd.setCursor(0,0);
lcd.print(“Setor 1”);

int h1 = dht1.readHumidity(); //Le o valor da umidade
int t1 = dht1.readTemperature(); //Le o valor da temperatura

lcd.setCursor(0,1);
lcd.print(“T1:”);
lcd.print(" “);
lcd.setCursor(3,1);
lcd.print(t1,1);
lcd.setCursor(5,1);
lcd.write((byte)0);//Mostra o simbolo do grau formado pelo array
lcd.setCursor(9,1);
lcd.print(“U1:”);
lcd.print(” “);
lcd.setCursor(12,1);
lcd.print(h1,1);
lcd.setCursor(14,1);
lcd.print(”%");
delay(2000);//Intervalo recomendado para leitura do sensor

break;
}
case 2:

{
lcd.setCursor(0,0);
lcd.print(“Setor 2”);

int h2 = dht2.readHumidity(); //Le o valor da umidade
int t2 = dht2.readTemperature(); //Le o valor da temperatura

lcd.setCursor(0,1);
lcd.print(“T2:”);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(t2,1);
lcd.setCursor(5,1);
lcd.write((byte)0);//Mostra o simbolo do grau formado pelo array

lcd.setCursor(9,1);
lcd.print(“U2:”);
lcd.print(" “);
lcd.setCursor(12,1);
lcd.print(h2,1);
lcd.setCursor(14,1);
lcd.print(”%");

delay(2000);//Intervalo recomendado para leitura do sensor
break;
}
case 3:
{
lcd.setCursor(0,0);
lcd.print(“Setor 3”);

int h3 = dht3.readHumidity(); //Le o valor da umidade
int t3 = dht3.readTemperature(); //Le o valor da temperatura

lcd.setCursor(0,1);
lcd.print(“T3:”);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(t3,1);
lcd.setCursor(5,1);
lcd.write((byte)0);//Mostra o simbolo do grau formado pelo array

lcd.setCursor(9,1);
lcd.print(“U3:”);
lcd.print(" “);
lcd.setCursor(12,1);
lcd.print(h3,1);
lcd.setCursor(14,1);
lcd.print(”%");

delay(2000);//Intervalo recomendado para leitura do sensor
break;
}

case 4:
{
lcd.setCursor(0,0);
lcd.print(“Setor 4”);

int h4 = dht4.readHumidity(); //Le o valor da umidade
int t4 = dht4.readTemperature(); //Le o valor da temperatura

lcd.setCursor(0,1);
lcd.print(“T4:”);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(t4,1);
lcd.setCursor(5,1);
lcd.write((byte)0);//Mostra o simbolo do grau formado pelo array

lcd.setCursor(9,1);
lcd.print(“U4:”);
lcd.print(" “);
lcd.setCursor(12,1);
lcd.print(h4,1);
lcd.setCursor(14,1);
lcd.print(”%");

delay(2000);//Intervalo recomendado para leitura do sensor
break;
}
}

void MainMenuBtn()
{
WaitBtnRelease();
if(btn_push == ‘U’)
{
mainMenuPage++;
if(mainMenuPage > mainMenuTotal)
mainMenuPage = 1;
}
else if(btn_push == ‘D’)
{
mainMenuPage–;
if(mainMenuPage == 0)
mainMenuPage = mainMenuTotal;
}

if(mainMenuPage != mainMenuPageOld) //only update display when page change
{
MainMenuDisplay();
mainMenuPageOld = mainMenuPage;
}
}

char ReadKeypad()
{
/* Keypad button analog Value
no button pressed 1023
select 741
left 503
down 326
up 142
right 0
*/
keypad_value = analogRead(keypad_pin);

if(keypad_value < 100)
return ‘R’;
else if(keypad_value < 200)
return ‘U’;
else if(keypad_value < 400)
return ‘D’;
else if(keypad_value < 600)
return ‘L’;
else if(keypad_value < 800)
return ‘S’;
else
return ‘N’;

}

void WaitBtnRelease()
{
while( analogRead(keypad_pin) < 800){}
}

Fernando_Lopes pelo que vi no seu código, ele executa a função MainMenuDisplay(), no setup e depois só quando o btn_push == 'S'; por isso que não atualiza o valor, só irá atualizar quando novamente quando a variável for btn_push == 'S', tenta deixar essa função for de if, onde o loop possa passar por ela sempre.

if(btn_push == 'S')//enter selected menu
    {
        WaitBtnRelease();
        switch (mainMenuPage)
        {
            case 1:
              MenuA();
              break;
            case 2:
              MenuB();
              break;
            case 3:
              MenuC();
              break;
            case 4:
              MenuD();
              break;
                      
        }
 
          MainMenuDisplay();
          WaitBtnRelease();
    }