Citazione:
Originalmente inviato da pavmail Torno un'attimo sul mio sketch, risolto perfettamente utilizzando il suggerimento di Carlo.
Il primo switch (livello massimo) viene premuto per frazioni di secondo ad ogni passaggio di una sfera. Questo comporta che, con il secondo switch (livello minimo) premuto, il programma di blocca. Per risolvere ho utilizzato un delay, ma non mi sembra la soluzione definitiva, dato che poi ritardo si riperquote anche sul riavvio del motore.
Pensavo di inserire un debounce per cambiare lo stato del primo switch dopo x tempo, ma ho fatto diversi tentativi senza riuscire ad integrarlo correttamente. E' una soluzione applicabile?
Grazie  |
Per quanto tempo rimane premuto il primo switch quando passa la sfera? Credo comunque che la soluzione migliore sia un delay.
Modifica la parti finale in questo modo.
if (StatoMotore){
delay(1000) // 1000 millisecondi, vedi tu quanto ti occorre
if (digitalRead(SW1)){ // se dopo il delay è ancora HIGH allora esegue
digitalWrite(PinMotore, HIGH);
}
}else{
digitalWrite(PinMotore, LOW);
}
Nota che questa soluzione implica necessariamente un ritardo nella risposta del motore, sia in accensione che in spegnimento. Se non puoi tollerare questo ritardo, specialmente per lo spegnimento, allora la soluzione è un pochino più complessa .
Carlo