Étape 5: Bouton debouncing
L’interruption se produit chaque ms 4,1 (voir étape 4) et je l’attends 8 consécutives lecture du bouton ouvert ou fermé de déclarer le bouton enfoncé ou non. Si le bouton doit être enfoncé ou relâché pour 8 x 4.1 ms ou Mme 32,8 je gérer cela en déplaçant une variable non signée de 1 octet vers la gauche de 1 et de mettre l’état actuel de la touche dans le bit le moins significatif. Si la variable qui en résulte est 0xFF je déclare enfoncé et si c’est 0 x 00 je déclare ne pas enfoncé. En outre, vous ne voulez pas que touche plusieurs presses pour vous inscrire si l’interrupteur est maintenue plus longtemps que les ms 32,8 donc l’état du bouton doit être actuellement ne pas pressé de déclarer enfoncé et vice versa.
J’ai aussi incrémenter une variable pour garder une trace des totale sur les touches et le nombre de touches particulière. Ces variables sont décrémentés lorsque le bouton est pris en charge dans la fonction loop() standard. De cette façon, les touches sont comptabilisés immédiatement mais le code qui fait réellement quelque chose d’utile n’est pas dans la routine d’interruption il embourber. Une routine d’interruption doit être aussi courte que possible.
Il existe des manières autres, peut-être plus simples de debounce commutateurs, mais j’ai trouvé cette manière assez robuste, fiable et utilisateur conviviale dans une variété d’applications.