Estoy escribiendo un reproductor de mp3 que escribe información en una pantalla LCD, me gustaría convertirlo de usar el teclado a usar botones, pero constantemente recibo demasiadas pulsaciones de teclas. He intentado tirar hacia arriba y hacia abajo / hacia arriba, pero sigo obteniendo el mismo resultado. ¿Alguien sabe de inmediato si se trata de un problema conocido o simplemente estoy haciendo algo mal? Oh, también estoy haciendo esto completamente en C usando cableado Pi.
12
if(digitalRead(data) && millis()-startTime > 10){
y establece startTime cada vez que ingresa para el bucle.Respuestas:
Los botones e interruptores mecánicos pueden sufrir un rebote del interruptor donde alternan rápidamente entre abierto y cerrado durante varios milisegundos.
Puede intentar eliminar el botón / interruptor en software o hardware.
Probablemente el más simple en software.
Si el nivel cambia (activado o desactivado), espere x milisegundos y lea el gpio nuevamente. Si todavía está en el nuevo estado, suponga que es una transición real. El valor de x podría ser algo así como 20.
Para soluciones de hardware, busque este tipo de publicación
fuente
Tómese el tiempo para leer la guía de rebote de Jack Ganssle . La primera página ilustra el problema con gran detalle, y la segunda, cómo tratarlo en hardware o software. No existe un método de rebote "perfecto", ¡pero hay muchos malos!
Este es un problema con el que te encontrarás repetidamente si conectas el software con los interruptores, por lo que vale la pena tomarse el tiempo para entenderlo, y el artículo de Jack es la forma más concisa que he visto para hacerlo.
fuente
En aplicaciones que tienen un ticker del sistema, generalmente implemento un registro de desplazamiento.
Por supuesto, debe llevar a cabo el evento de presionar un botón solo en un borde ascendente.
fuente