Archivo de la etiqueta: debounce

Contador de pulsos

NOTA: para todas estas prácticas, usamos un botón conectado al pin digital 2 configurado como INPUT_PULLUP. En este caso al leer el pin 2 digitalRead(2) me devuelve 1 cuando no está pulsado el botón (abierto) y me devuelve 0 cuando está pulsado el botón (cerrado)

Práctica: Usar la resistencia interna de pull up de Arduino para detectar la pulsación de un botón (leer estado de una entrada digital) y encender el led 13 (integrado en placa) cuando tenga pulsado el botón y apagarlo cuando lo libere. Adicionalmente sacar por el monitor serie el estado de pulsación del botón con un 1 o un 0, de esta forma abriendo el Serial Plotter es posible ver la señal que recibe Arduino.

Tutorial: http://arduino.cc/en/Tutorial/InputPullupSerial

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio08-pullup

NOTA: Ver efecto de la diferencia del tiempo de loop cuando pulso o no pulso el botón debido a el Serial.println que se ejecuta al pulsar el botón. Ver ejercicio https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio08-pullup_tiempo

NOTA: Si el tiempo de loop es muy largo podemos perder pulsaciones rápidas.

Práctica: Modificar el ejemplo anterior pero en lugar de mantener pulsado el botón para encender el led, con una pulsación enciende y con otra apaga el led. Ahora el led ponerlo en el pin 10 en lugar del 13. Detectar flancos para encender y apagar.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio08-pullup_interruptor

Práctica: Modificar el ejemplo anterior para contar el número de veces que se pulsa un botón detectando flancos ascendentes o descendentes y sacarlo por el monitor serie. Adicionalmente encender o apagar el led cada vez que haya 4 pulsaciones del botón.

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio09-cuentapulsos

Solución a los rebotes

Práctica: Añadir una solución a los rebotes. Los rebotes son las falsas pulsaciones que se producen al hacer falsos contactos en el interruptor.

Más información https://www.arduino.cc/en/Tutorial/Debounce

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio08-pullup_interruptor_rebote

Otra forma de solucionar los rebotes por código: http://miarduinounotieneunblog.blogspot.com.es/2016/01/pulsador-antirrebote-con-contador-de.html

Solucionar rebotes por HW:

Calculadora de valores para debouncing: http://protological.com/debounce-calaculator/

Práctica avanzada: Ver el funcionamiento de la función tone() para generar notas. Tone() genera una onda cuadrada de una frecuencia específica y con un 50% de duty cycle en el pin especificado. La duración del tono puede ser especificado o en caso contrario continúa hasta llamar a la función noTone().

Solo un tono puede ser generado simultáneamente, si un tono ya se está ejecutando en otro pin, la llamada a tone() no tendrá efecto.

Para más información:

NOTA: no confundir tone con PWM. PWM tiene una frecuencia fija de 500Hz, por lo que entre línea verde y verde hay siempre 2ms.

Esquema de conexión:

Tutoriales:

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercicio10-tone

Musica Star Wars con Arduino: http://miarduinounotieneunblog.blogspot.com.es/2016/01/banda-sonora-de-star-wars-con-un.html

Solución: https://github.com/jecrespo/Aprendiendo-Arduino/tree/master/Ejercio51-Musica_StarWars