Stap 5: De knoop van de debouncing
De interrupt gebeurt elke 4.1 ms (zie stap 4) en ik wachten tot 8 opeenvolgende lezing van de knop open of gesloten te verklaren het ingedrukt of niet. Dus de knop moet worden omgaan ingedrukt of losgelaten voor 8 x 4.1 ms of 32.8 ms. ik door een niet-ondertekende 1-byte variabele verschuiven naar links door 1 en zetten van de huidige status van de knop in het minste significante beetje. Als de resulterende variabele 0xFF verklaar ik deze ingedrukt en als het 0x00 ik verklaar het niet ingedrukt. Ook, wilt u niet dat meerdere knop indrukt om te registreren als de schakelaar wordt gehouden meer dan de 32.8 ms zodat de status van de knop heeft ingedrukt worden momenteel niet te verklaren dat deze ingedrukt en vice versa.
Ik verhogen ook een variabele om de totale knooppersen en het aantal bepaalde knop persen bij te houden. Deze variabelen zijn verlaagd, wanneer de knop wordt verzorgd in de standaard loop-functie. Deze manier knooppersen worden onmiddellijk geregistreerd maar de code die eigenlijk iets nuttigs doet is niet in de interrupt routine bogging het naar beneden. Een interrupt routine moet zo kort mogelijk worden gehouden.
Er zijn andere, misschien eenvoudiger, manieren om debounce schakelaars, maar ik heb gevonden die manier heel robuust, betrouwbaar en gebruiker vriendelijke in een verscheidenheid van toepassingen.