Todas las rutinas de desbordamiento de software que he visto implican esperar hasta que un cierto número de lecturas secuenciales de una señal devuelvan 0 o 1. Eso tiene sentido, por supuesto. Pero significa que hay un compromiso inevitable entre robustez y latencia. Cuantas más lecturas exija 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 una cierta cantidad de tiempo después de un borde. Si el interruptor había estado leyendo 0, y luego un solo sondeo devuelve un 1, entonces interpretar esto como un 1 lógico para la duración del período de rebote esperado. Lo mismo ocurre cuando se pasa de 1 a 0.
Obviamente, esto seguiría limitando la tasa de entrada máxima. Pero también reduciría la latencia de una sola pulsación de botón a casi cero, incluso para tiempos de rebote extremadamente largos.
¿Hay problemas con este enfoque? Parece un enfoque obvio para la depuración del software, por lo que me sorprende que no se utilice.