Arduino – Funzione antirimbalzo (debouncing)

Limitare all’unità l’incremento ad ogni pressione prolungata

Per limitare l’incremento della variabile ad un valore non maggiore all’unità ad ogni pressione del pulsante, si può ricorrere a 2 soluzioni “quasi” equivalenti:

Soluzione 1

Dato che la pressione del pulsante porta a livello basso l’ingresso, possiamo imporre al programma di attendere che questo ritorni a livello alto dopo che la variabile è stata incrementata. E’ sufficiente inserire, dopo l’incremento, un while loop la cui condizione di esecuzione è lo stato dell’ingresso a livello basso. Quindi dopo aver incrementato la variabile, se il pulsante risulta ancora premuto, il ciclo “interrompe” l’esecuzione del programma finché la condizione di esecuzione non diventa falsa, cioè quando il pulsante viene rilasciato.
Questa soluzione è molto semplice in quanto richiede solo l’aggiunta di una riga al listato, ma presenta lo svantaggio di fermare il programma finché il pulsante non viene rilasciato.

Soluzione 2

E’ sufficiente imporre che la pressione del pulsante determini, oltre all’incremento della variabile, la variazione di un’altra variabile di controllo che ne impedisca un ulteriore incremento finché il pulsante non viene rilasciato.
E’ necessario dichiarare la nuova variabile state_incr e impiegare la seguente struttura per il listato. Questa soluzione presenta il vantaggio di non fermare l’esecuzione del programma mentre il pulsante rimane premuto.

Nel video seguente è mostrata l’implementazione di questo listato che impedisce, ad una pressione prolungata del pulsante, un incremento della variabile maggiore dell’unità.

44,591 total views, 4 views today