Ciao a tutti,
non ho ben capito il ciclo while, lo sto utilizzando per fare un controllo di uno switch per porta automatizzata, con segnalazione di errore se la porta non arriva mai a fine corsa, il pezzo di programma sotto riporta la parte di apertura, la domanda è questa, dopo il ciclo while io ho lo stop del relè comando porta, e va bene, mentre dentro il ciclo ho un if per il tempo trascorso, che se scade, attiva un flag, che poi nel loop mi da l'allarme... Questo flag dovrei però disattivarlo se lo switch funziona, quindi dove ho messo lo stop del relè comando porta, ma non va bene, sarebbe sempre azzerato. In pratica, il ciclo while, sia che "lavori" o che non "lavori" il programma va sempre a leggere dopo le graffe di chiusura del ciclo... Quindi? Come fare? Dove mi sono incartato? Spero di essere riuscito a spiegarmi.
Grazie
//*********************************************************
void apriporta()
{
digitalWrite(DISPLAY, HIGH); // attiva il relè per alimentare il display
GLCD.ClearScreen(); // cancella display
GLCD.print("Porta in apertura"); // scrive
digitalWrite(APRI_PORTA, HIGH); // attivo il relè per aprire la porta
inizio = millis(); // carico tempo per ettesa per errore
while (digitalRead(APERTA) == HIGH) // controllo se la porta è aperta
{
if ((millis() - inizio) >= tempo) // controllo se è scaduto il tempo
{
all_ap_porta = 1; // avviso di dare l'allarme
break; // esco dal ciclo while
}
}
digitalWrite(APRI_PORTA, LOW); // disattivo il relè per aprire la porta
}
//*********************************************************************