Problemas con sensor DHT11? Y controlador temperatura

Hola nuevamente.
Después de hacer algunos cambios en el código mirando aquí y allá, quise incorporar a mi proyecto tres fases de potencia,,Alta; Media; Baja,que harán que se enciendan tres ventiladores con sus respectivas células:
V1,V2,V3 = Ventiladores
C1,C2,C3= celulas
BAJA= V1,C1 activados ,el resto desactivados
MEDIA= V1,V2 ,C1,C2 activados ,el resto desactivados
ALTA= V1,V2,V2,,,C1,C2,C3 todos activados.

Para esto hice un menú sencillo con tres opciones y un botón para su manejo.
El problema está con el "while" para que solo salte de opción cuando el boton está pulsado, no me continúa con el código a menos que no mantenga este botón apretado,no pudiendo cambiar de temperatura ni nada.
Una ayuda me vendría muy bien para saltar este rompecabezas. Gracias de antemano.
En " void menus()" esta el problema

#include <OneButton.h>
OneButton button(11, true);// Pin del boton
#include <DHT.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd (2,3,4,5,6,7);

#include <EEPROM.h>
#define DHTPIN 8
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
int TempVal;  // Valor de temperatura establecido
float Frio;   // Valor capturado por el sensor
float Humedad;
int Relay1=10;  // Pin salida para el Relay1
int Relay2=12;  // Pin salida para el Relay2
byte cursor = 0;
int menu=0;
int btn1=A0;
int releb=A2;
int relem=A3;
int relea=A4;
int tmax = 35;  
int tmin = 11;
int MargenTemp = 2;  // Histéresis de temperatura


void setup() {
  lcd.begin(16,2);
    
    // PRESENTACION  //
    
//lcd.setCursor(0,0);
  //  lcd.print("  CONTROL DE ");  
//lcd.setCursor(0,1);
    //lcd.print("  TEMPERATURA  ");
   // delay(2000);
    //lcd.clear();
//lcd.setCursor(6,0);
   // lcd.print(" b& ");
//lcd.setCursor(2,1);
  //  lcd.print("   JDLR2    ");
   // delay(10000);
   // lcd.clear();
    
 
  dht.begin();
  pinMode(Relay1, OUTPUT);
  digitalWrite(Relay1,HIGH);
  pinMode(Relay2,OUTPUT);
  digitalWrite(Relay2,HIGH);
  button.attachClick(click);
  pinMode(btn1,INPUT);
  pinMode(releb,OUTPUT);
  digitalWrite(A2,HIGH);
  pinMode(relem,OUTPUT);
  analogWrite(A3,HIGH);
  pinMode(relea,OUTPUT);
  analogWrite(A4,HIGH);
  button.attachDoubleClick(doubleclick);
  button.attachLongPressStart(longPressStart);
  
  if (EEPROM.read(50) == 255) EEPROM.put(0,-5);  // Si es la primera vez que se graba en la eeprom
  EEPROM.get(50 , TempVal); // Establece el valor de lo previamente guardado

  delay(1000);
  lcd.setCursor(0,0);
  lcd.print("T:");
  MideTemperatura();
  lcd.setCursor(11,0);
  lcd.print("E:");
  lcd.setCursor(13,0);
  lcd.print(TempVal);
  lcd.print("\337");
  lcd.setCursor(0,1);
  lcd.print("H:");
  lcd.setCursor(6,0);
  lcd.print("P:");

}
  

void click() {   //  Baja la temperatura establecida y la muestra en pantalla
  TempVal--;
  if(TempVal < tmin) TempVal = tmin;
  lcd.setCursor(13,0);
  lcd.print("    ");
  lcd.setCursor(13,0);
  lcd.print(TempVal);
  lcd.print("\337");
  lcd.setCursor(0,1);
  lcd.print("H:");
  lcd.setCursor(6,0);
  lcd.print("P:");
}

void doubleclick() {  // Sube la temperatura establecida y la muestra en pantalla
  TempVal++;
  if(TempVal > tmax) TempVal = tmax;
  lcd.setCursor(13,0);
  lcd.print("    ");
  lcd.setCursor(13,0);
  lcd.print(TempVal);
  lcd.print("\337");
  lcd.setCursor(0,1);
  lcd.print("H:");
  lcd.setCursor(6,0);
  lcd.print("P:");
}

void longPressStart() {  // Graba en la eeprom ell valor establecido
  EEPROM.put(50 , TempVal);
  lcd.setCursor(cursor,1);
  lcd.print(" ");
  lcd.setCursor(0,1);
  lcd.print("**  Guardado  **");
  delay(1500);
  lcd.setCursor(3,1);
  lcd.print("                ");
  lcd.setCursor(0,1);
  lcd.print("H:");
  lcd.setCursor(6,0);
  lcd.print("P:");
}

void MideTemperatura() {
   
   Frio = dht.readTemperature() ; //Se obtiene la temperatura en ºC
      lcd.setCursor(2,0);
      lcd.print("    ");
      lcd.setCursor(2,0);
      lcd.print(Frio,0); // Imprime la temperatura ( 1 con un decimal 0 sin decimal)
      lcd.print("\337"); // Imprime simbolo °
    }
        

void MideHumedad() {  
    
  Humedad= dht.readHumidity(); //Se obtiene la humedad relativa
    lcd.setCursor(2,1);
    lcd.print("    ");
    lcd.setCursor(2,1);
    lcd.print(Humedad,0);
    lcd.print("\337");
    }



void Termostato(){   
    
      if (Frio<= TempVal)
    {
  digitalWrite(Relay1,HIGH);// Apaga el rele1 frio
       
    lcd.setCursor(6,1); 
     lcd.print("    ");
     lcd.setCursor(6,1);
     lcd.print("F:OF");
       
       }
if (Frio>TempVal+MargenTemp)
  {
   digitalWrite(Relay1,LOW);
  lcd.setCursor(6,1);
   lcd.print("    ");
    lcd.setCursor(6,1);
  lcd.print("F:ON");
 
       // Enciende Rele1
   }
    if (TempVal>=Frio)
   {
    digitalWrite(Relay2,HIGH);// Apaga Relay2 Calor
        lcd.setCursor(12,1);
        lcd.print("    ");
        lcd.setCursor(12,1);
        lcd.print("C:OF");
     
         }
  if (TempVal>Frio+MargenTemp)
   {
    digitalWrite(Relay2,LOW); // Enciende Relay2
        lcd.setCursor(12,1);
        lcd.print("    ");
        lcd.setCursor(12,1);
        lcd.print("C:ON");
   
  }
 }
void menus() {
int lectura1 = digitalRead(btn1);
   if(lectura1 == 0){ 
         if(menu == 3){
        menu = 0;  }
 menu++; 
 while(!digitalRead(btn1));
        
    
    
   switch(menu){ 
            
       case 1: 
       lcd.setCursor(8,0);
        lcd.print("BA");
            
if(lectura1 == 0){ 
     if(menu==1){ 
      
       analogWrite(A2,LOW);
       analogWrite(A3,HIGH);
       analogWrite(A4,HIGH);
             }
      }  
             
    break; 
            
       case 2:
         lcd.setCursor(8,0);
        lcd.print("ME");
            
if( menu==2){
            
       analogWrite(A2,LOW);
       analogWrite(A3,LOW);
       analogWrite(A4,HIGH);
            } 
    break;  
            
        case 3: 
       lcd.setCursor(8,0);
       lcd.print("AL");
          
if(menu== 3){ 

       digitalWrite(A2,LOW);
       analogWrite(A3,LOW);
       analogWrite(A4,LOW);
         } 
            break; 
      }     
    }
}
  
void loop() {

unsigned long currentMillis = millis();
  button.tick();
  
  if (currentMillis > 2000) {  // Pasado el primer minuto de arranque del programa
    if (currentMillis % 500 < 3) {  // Cada 20 segundos 
      MideTemperatura();  // Mide la temperatura Ambiente
      Termostato();       // Consulta el termostato
      MideHumedad(); // Mide la Humedad Relativa
      menus();
           
     }
        }
    }
    

 
  


Pongo todo el código.
Gracias nuevamente