while (startState == HIGH)

nid69ita:
Sono d'accordo con Orso, nel ciclo White NON rileggi mai il tasto

ho provato a metterlo nel secondo while (dove resta per tutto il tempo del programma di solito 5 ore) ma non mi legge il tasto .
Ho appena provato così...niente

int temperature () {
  long timeStepMillis;                                                                //Variabile contenente la durata dello step in millisecondi
  long timeStepNow;                                                                   //Variabile contenente il tempo trascorso dall'avvio dello step-
  long timeTemperature;                                                               //Variabile di appoggio per il calcolo della formula.
  int temperatureStepDiff;                                                            //Variabile contenente la differenza di temperatura tra i due step
  long temperatureNowStep;                                                            //Temperatura da sottrarre o addizionare allo step precedente
  long temperatureNow;                                                                //Variabile della temperatura attuale in base al tempo trascorso

  while (startState == HIGH) {                                                       //fino a quando startState che avvia il programma è alto
    for (int control = 0; control < 6; control++) {                                   //regola "control" in modo che cicli da 0 a 4 (gli step)
      if (control == 5) {
        startState = LOW;
        break;
      }

      timeStepMillis = timeStep[control] * 60000;                                           //converte il timeStep in millisecondi
      while (timeStepStart + timeStepMillis > millis()) {                                   //ciclo fino a quando il tempo di partenza + durata Step è maggiore di millis
        if (buttonStartState == HIGH && lastStartState == startState) {
          startState = LOW;
        }
        if (control == 0) {
          temperatureNow = temperatureIn;
        }
        else if (control == 1) {
          timeTemperature = timeStepNow * temperatureStep[control];                         //si esegue la formula tempo trscorso per temperatura impostata (a capo)
          temperatureNow = timeTemperature / timeStepMillis;                                //diviso la durata dello step (tempo trascorso x temperatura impostata)/durata Step
        }
        else {
          if (temperatureStep[control] < temperatureStep[control - 1]) {                    //si controlla prima qual'è lo step con temperatura maggiore
            temperatureStepDiff = temperatureStep[control - 1] - temperatureStep[control];  //si calcola la differenza di temperatura tra lo step precedente e quello attuale
            timeTemperature = timeStepNow * temperatureStepDiff;                            //tempo trascorso x differenza di temperatura
            temperatureNowStep = timeTemperature / timeStepMillis;                          //calcolo del valore da sottrarre allo step precedente
            temperatureNow = temperatureStep[control - 1] - temperatureNowStep;             //sottrazione di temperatura, perché più freddo, allo step precedente
          }
          else {
            temperatureStepDiff = temperatureStep[control] - temperatureStep[control - 1];  //si calcola la differenza di temperatura tra lo step attuale e quello precedente
            timeTemperature = timeStepNow * temperatureStepDiff;                            //tempo trascorso x differenza di temperatura
            temperatureNowStep = timeTemperature / timeStepMillis;                          //calcolo del valore da addizionare allo step precedente
            temperatureNow = temperatureStep[control] - temperatureNowStep;                 //addizione di temperatura allo step precedente perché più caldo
          }
        }

        timeStepNow = millis() - timeStepStart;                                             //Calcola il tempo trascorso dall'inizio dello step
        sensors.requestTemperatures();
        temperatureIn = sensors.getTempCByIndex(0);
        if (temperatureNow - 2 < temperatureIn) {                                        //se la temperatura al momento è minore di 2 gradi
          ;                                                                              //accende la resistenza
        }
        else if (temperatureNow + 2 > temperatureIn) {                                   //se la temperatura è maggiore di 3 gradi
          ;                                                                              //spegni la resistenza
        }
        hhFloat = (timeStepNow) / 60000; //DIVIDE I MILLISECONDI TRASCORSI PER 60000 E CALCOLO I MINUTI
        hh = (int (hhFloat) / 60);
        hhINT = hh * 60;
        mm = (int (hhFloat) - hhINT); // TRASFORMO I MINUTI DA DECIMALE A SESSADECIAMALE
        if (control == 0) {
          lcd.setCursor (0, 0);
          lcd.print (" PARTENZA RIT.");
          lcd.setCursor(0, 1);
          if (hh < 10) {
            lcd.print ("  Tempo 0");
            lcd.print (hh); //L' INTERO DELLA VARIABILE "H" SONO LE ORE
          }
          else {
            lcd.print ("  Tempo ");
            lcd.print(hh); //L' INTERO DELLA VARIABILE "H" SONO LE ORE
          }
          lcd.print (":");
          if (mm < 10) {
            lcd.print ("0");
            lcd.print (mm);
          }
          else {
            lcd.print(mm);//L'INTERO DELLA VARIABILE "M" CONTIENE I MINUTI
          }
        }                                                                                  //il tempo di partenza + durata Step raggiunge millis (scade il timeStep)
        else {
          lcd.setCursor (0, 0);
          lcd.print ("STEP");
          lcd.print (control);
          if (hh < 10) {
            lcd.print (" 0");
            lcd.print (hh); //L' INTERO DELLA VARIABILE "H" SONO LE ORE
          }
          else {
            lcd.print (" ");
            lcd.print(hh); //L' INTERO DELLA VARIABILE "H" SONO LE ORE
          }
          lcd.print (":");
          if (mm < 10) {
            lcd.print ("0");
            lcd.print (mm);
          }
          else {
            lcd.print(mm);//L'INTERO DELLA VARIABILE "M" CONTIENE I MINUTI
          }
          lcd.setCursor (0, 1);
          lcd.print (char(223));
          lcd.print ("C ");
          lcd.print (temperatureIn);
          lcd.print (" di ");
          lcd.print (temperatureStep[control]);
        }
      }
      lcd.clear();
      timeStepStart = millis();                                                          //resetta il valore a millis() per calcolare lo step successivo
    }                                                                                    //fine del ciclo for
  }
  //spegni la resistenza
  counterMenu = 0;                                                                       //esce dal ciclo while, startState è basso e torna al menu 0
}