Sí, el rebote en ambas direcciones es necesario si desea una ventaja única garantizada cada vez que el interruptor cambie de estado.
Afortunadamente, no necesita ningún hardware adicional para realizar el desglose si el conmutador está conectado a un microcontrolador. Si el micro tiene un pullup interno, lo que muchos hacen, no necesita nada más externo que el interruptor entre el micro pin y la tierra.
Encuentro que 50 ms es un buen tiempo de rebote. La mayoría de los interruptores rebotan por mucho menos que eso, pero algunos pueden ser casi tan largos. Sin embargo, 50 ms aún se sentirá instantáneo para un usuario humano, por lo que también podría ser más confiable. La única diferencia es el número con el que cuenta en el firmware, por lo que no hay costos adicionales allí. De todos modos, normalmente tengo una interrupción periódica de 1 ms por otras razones, por lo que si el conmutador se encuentra en el mismo estado 50 veces seguidas en esa interrupción, declara que ha sido devuelto al nuevo estado.
Detalles sobre la lógica de rebote en respuesta al comentario:
En general, tendrá un bit global que indica el estado oficial del conmutador. Esto es lo que utiliza cualquier lógica que necesite saber de qué manera se establece el interruptor. El único estado adicional que necesita es un contador, generalmente un solo byte, en la rutina de interrupción. Digamos que la interrupción es cada 1 ms y el tiempo de rebote es de 50 ms. Para cada interrupción:
If instananeous state matches debounced state:
Reset counter to 50
Done
If instantaneous state differs from debounced state:
Decrement counter
If counter reaches 0:
Declare the new debounced state
Reset counter to 50
Done