Debouncing degli interruttori
Il filtraggio dei rapidi impulsi on-off che un interruttore meccanico produce nei millisecondi successivi alla pressione.
I contatti metallici rimbalzano. Per un microcontrollore che legge un pin GPIO milioni di volte al secondo, la pressione di un singolo pulsante appare come dieci o cinquanta transizioni nell'arco di pochi millisecondi, e un interrupt sul fronte scatta altrettante volte. Chiunque abbia costruito il suo primo contatore a pulsante lo ha visto saltare da 3 a 11.
La soluzione hardware è un filtro RC che alimenta uno Schmitt trigger, il quale rallenta il segnale e aggiunge isteresi. Nel firmware di solito si campiona il pin a frequenza fissa, ad esempio da un interrupt SysTick, e si accetta un nuovo stato solo quando è rimasto stabile per più campioni consecutivi. Anche attendere 20 ms dopo il primo fronte funziona, ma sottrae tempo a tutto il resto. L'analisi di Jack Ganssle su come si comportano davvero gli interruttori resta il riferimento standard.