Todas las rutinas de rebote de software que he visto implican esperar hasta cierto número de lecturas secuenciales de un retorno de señal 0 o 1. Eso tiene sentido, por supuesto. Pero significa que hay un compromiso inevitable entre la robustez y la latencia. Cuantas más lecturas solicite para aceptar un cambio de nivel, mayor será el tiempo de respuesta.
Parece que una alternativa simple sería simplemente ignorar las lecturas de entrada durante un cierto período de tiempo después de un borde. Si el conmutador ha estado leyendo 0, y luego una única encuesta devuelve un 1, entonces interprete esto como un 1 lógico para la duración del período de rebote esperado. Igualmente cuando se realiza la transición de 1 a 0.
Obviamente, esto todavía limitaría la tasa de entrada máxima. Pero también llevaría la latencia de un solo botón a cero, incluso para tiempos de rebote extremadamente largos.
¿Hay problemas con este enfoque? Parece un enfoque obvio para el lanzamiento de software, por lo que me sorprende que no se use.