Antirrebote (debouncing)
Filtrar los rápidos pulsos de encendido y apagado que genera un interruptor mecánico durante los milisegundos posteriores a pulsarlo.
Los contactos metálicos rebotan. Para un microcontrolador que lee un pin GPIO millones de veces por segundo, una sola pulsación son diez o cincuenta transiciones en pocos milisegundos, y una interrupción por flanco se dispara otras tantas veces. Quien haya montado su primer contador con un pulsador lo ha visto saltar de 3 a 11.
La solución por hardware es un filtro RC seguido de un disparador Schmitt, que ralentiza la señal y le añade histéresis. En firmware lo habitual es muestrear el pin a intervalos fijos, por ejemplo desde la interrupción de SysTick, y aceptar un estado nuevo solo cuando se ha mantenido estable durante varias muestras seguidas. Esperar sin más 20 ms tras el primer flanco también funciona, pero le roba tiempo a todo lo demás. El análisis de Jack Ganssle sobre cómo se comportan de verdad los interruptores sigue siendo la referencia.