Ho provato a sostituire delay con millis senza successo.
Ho anche pubblicato un post con il quale chiedevo dove sbagliavo ma senza trovare soluzione.
Ora il mio dubbio è che millis non funziona bene perchè utilizzo anche questa funzione:
// Funzione per il Contatore Kwh
ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt
{
TCNT1 = 64535; // preload timer
//*** POTENZA TOTALE ***
totPulseStatus = digitalRead(PORT_POWER_TOT);
if (totLastPulseStatus == HIGH && totPulseStatus == LOW) {
totPowerPulseCounter++;
totPulseMillis = millis();
totPulseTime = totPulseMillis - totLastPulseMillis;
totPowerValue = (1800000 / totPulseTime);
totLastPulseMillis = millis();
}
if (totPulseStatus != totLastPulseStatus)
totLastPulseStatus = totPulseStatus;
}
E' possibile che la funzione di cui sopra mi blocchi il conteggio di questa?
[code]
// Funzioni per la tenda
void tenda() //Funziome per l'apertura o la chiusura totale della tenda
{
while ((millis() - t_tenda) > 1800) // Attendo 1,8 secondi prima di riposizionare il relè sullo stato iniziale.
{
t_tenda = millis();
Serial.print("t_tenda ");
Serial.println(t_tenda);
Serial.print("millis ");
Serial.println(millis());
Serial.print("(millis() - t_tenda)");
Serial.println((millis() - t_tenda));
digitalWrite(RCHT, LOW);//Abbasso la tenda
}
//Operazione necessaria per simulare la pressione del tasto altrimenti la centralina non riceve correttamente il comando
digitalWrite(RCHT, HIGH);
}
[/code]