Paso 5: Botón contra rebotes
La interrupción ocurre cada 4,1 ms (ver paso 4) y esperar 8 consecutivos de lectura del botón abierto o cerrado para declarar el botón pulsado o no. Por lo que el botón debe ser presionado o liberado para 8 x 4.1 ms o Sra. 32,8 manejar esto por cambiar una variable de 1 byte sin signo a la izquierda por 1 y poner el estado actual del botón en el bit menos significativo. Si la variable resultante es 0xFF declaro que presiona y si es 0 x 00 declaro no presionado. Además, no quiero que botón múltiples Prensas para registrar si el interruptor se mantiene más tiempo que el 32,8 ms por lo que el estado del botón debe actualmente ser pulsado no declarar presionó y viceversa.
Yo también incrementa una variable para hacer un seguimiento de las prensas del botón total y el número de pulsar un botón determinado. Estas variables son disminuye cuando el botón está cuidado en la función loop() estándar. De este modo, pulsar un botón se registran inmediatamente pero el código que realmente hace algo útil no está en la rutina de interrupción bogging hacia abajo. Una rutina de interrupción debe ser lo más corta posible.
Hay otros, quizá más simples, formas de debounce interruptores pero he encontrado esta forma bastante robusto, confiable y usuario amigable en una variedad de aplicaciones.