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
}