while (startState == HIGH)

ORSO2001:
altra cosa...nella funzione temperature() inserisci una serie di variabili locali long ed una int...quella riferita a millis() dovrebbe essere unsigned...e comunque sai che scritte così vengono create e distrutte ad ogni ciclo vero!?

si c'è un secondo while annidato nel primo e stavo cercando di capire se il problema fosse quello, prima del secondo while c'è un for e da lì all'ultimo esce con il break in un "if" se i == 5.
Ho provato a cambiare lo stato dall'interno del primo while, dal secondo e da fuori come quello ho postato ma lo stato non cambia, il pulsante non viene letto (provato con Serial.print).
Le variabili DEVONO essere distrutte ad ogni ciclo perché ognuno ha valori diversi presi da array; non solo: alcune di loro cambiano sempre poiché la formula che gestisce la temperatura è
"temperatura al momento = (tempo trascorso x temperatura impostata) / durata di ogni ciclo quindi è in funzione di timeStepNow (tempo trascorso) che cambia in ogni istante.