Ya que mencionó "aplicación", asumiré que está ejecutando un código que supervisa los botones y los contactos. Si ese es el caso, puedo decirle por mi experiencia que es mejor hacer su rebote de manera programática. Considere desarrollar una función a la que llame ocasionalmente para verificar si hay pulsaciones de botón. Sin profundizar en ningún idioma en particular, lo que haría la función es esto ...
- Como inicialización única, establezca una variable en el valor del temporizador de milisegundos de su sistema, y quizás inicialice una "variable de botón" como estática , como un mapa de bits de todos sus botones, y configúrela en cero (o "-1" si "ALTO" es el estado predeterminado de sus botones). Además, inicialice dos variables, una para representar su tiempo de rebote en milisegundos (comience con 20, por ejemplo).
- Cuando su aplicación llame a su función, debería marcar el botón (o varios botones). Si ningún botón ha cambiado de estado en comparación con su variable almacenada, simplemente devuelva la variable de estado de botón almacenada existente.
- Si cualquier botón ha cambiado el estado, verifique el temporizador de milisegundos de su sistema actual, reste el tiempo almacenado en la variable del temporizador que inicializó previamente. Si la diferencia es menor que su tiempo de rebote, simplemente ignore el cambio y devuelva la variable de estado del botón sin modificar.
- Si llega a este paso, entonces uno o más botones han cambiado de estado Y al menos ha pasado su tiempo de rebote especificado. En este caso, almacene el nuevo estado del botón en el mapa de bits de su botón, reinicie el temporizador al milisegundo actual del sistema y devuelva la variable del botón.
Eso es todo lo que hay también. No solo se ha ahorrado al menos 2 componentes por botón (la red RC), y ha creado efectivamente un filtro de "muro de ladrillo", mucho más preciso y consistente de lo que sería la red RC. Además, ha hecho que sea muy fácil cambiar el importante tiempo de rebote sin necesidad de desoldar las piezas.
Una nota sobre esta metodología, también es posible llamar a una función similar mediante una interrupción en lugar de llamarla como parte de una secuencia de round-robin en su ciclo de programa principal. En mi opinión, esta NO es una buena idea, porque un contacto ruidoso defectuoso generaría muchas interrupciones que podrían atascar fácilmente su programa. Por lo general, en sistemas más grandes donde una interrupción en realidad informa los aciertos de los botones (como una interrupción del teclado en una computadora), los aciertos de los botones ya han sido preprocesados por una pequeña MCU dedicada en el propio teclado. Si lo está haciendo en un sistema más pequeño y está haciendo TODO el rebote, el método que sugiero es una mejor opción.