El-bucle-while-y-el-pulsador

Hasta el infinito … mientras no me pulses

En una lección anterior aprendimos a programar el bucle for, básicamente servía para repetir un número de veces una serie de acciones. Sin embargo no siempre queremos que una acción se repita un número determinado de veces sino más bien hasta que suceda algún evento.

Por ejemplo, si quiero un programa que encienda y apague un LED 10 veces, lo más natural sería hacerlo como ya hemos visto con el bucle for, sin embargo, ¿qué pasa si quiero que se encienda y se apague hasta que pulse un botón?, aunque habría modos rebuscados de hacerlo con el bucle for (a ver si se te ocurre alguno) hay modos más sencillo de hacerlo, un modo intuitivo de decirlo sería: mientras no pulses el botón, apague y enciende el LED. Gráficamente se representaría así.

While-loop-diagram

Veamos como sería el código arduino del bucle while. Asumimos que existe una variable a que es un entero y que en alguna otra parte de nuestro programa se actualiza, el bucle while sería

Este código pondrá el pin digital 2 a 5 voltios durante 1 segundo, y a 0 voltios durante otro segundo (si hay un LED conectado parpadeará) mientras a sea menor que 10. Puedes ver la referencia completa del bucle while aquí

Vamos con el pulsador

En lecciones anteriores vimos como escribir en un pin digital, poniéndolo a 5 voltios o a 0 voltios, y como ejemplo usamos un LED. Ahora vamos a aprender a leer el valor que hay en pin digital, que será, del mismo modo de 5 voltios, o de 0 voltios. Como ejemplo vamos a usar un pulsador. Un pulsador es claramente un periférico digital, ya que puede tomar dos valores: pulsado, no pulsado. Pues bien, en un caso pondrá una tensión de 5 voltios en el pin digital y en el otro de 0. Dependiendo del diseño del pulsador serán 5 voltios cuando esté pulsado o cuando esté no pulsado. Veamos cómo funciona un pulsador

121

Puedes ver en el diagrama que el pulsador tiene tres pines. Uno conectado a 5V, otro a tierra (GND) y el tercero al pin de señal (In). En este diagrama, si has estudiado electrónica, comprobarás que cuando el pulsador está presionado, el cerrarse el circuito, en el pin de señal habrá 5 Voltios. Sin embargo, mira este otro diagrama

120

En este caso, en el pin de señal habrá 0 voltios cuando el pulsador esté pulsado. Ahora bien, ¿cómo lo programamos en Arduino?

Asumamos la siguiente conexión de componentes

zum-3led-4puls

Lo primero, declaramos el pin 5, al que está conectado el pulsador como entrada, y el pin 3, donde está el LED, como salida

Una vez hecho esto vamos a hacer un programa que mientras el pulsador esté pulsado el LED parpadee, y de lo contrario esté apagado. ¿Cómo sabemos si el pulsador está pulsado? Nuestro pulsador marca 5V cuando se pulsa, por lo tanto la función que lee los pines digitales: digitalRead() debe devolver 1. (para más información consultar la referencia de la función. El código quedaría por lo tanto

Este programa se podría modificar usando una variable, veamos cómo

Lo más importante respecto a esta modificación es tener en cuenta que el valor de la variable pulsador se debe actualizar en cada iteración, ya que de otro modo el valor nunca cambiaría dentro del bucle independientemente de que esté el botón pulsado o no, y por lo tanto el programa nunca saldría del bucle.

OJO

OBSERVA: ¿Te has preguntado alguna vez como funcionan los finales de carrera? Resulta que los finales de carrera a pesar de tener una estructura diferente, funcionan de la misma manera y se programan de una forma muy parecida. En particular los finales de carrera incluidos en el BQ Zum Extension Kit dan un ‘0’ cuando están pulsados y un ‘1’ cuando están sin pulsar. ¡Te sugerimos que pruebes a intentar programarlo, y descubrir su funcionamiento por ti mismo!

Te lanzo un reto. Intenta hacer un programa que funcione como cronómetro. Usa el LCD y empieza a contar (y mostrar) cada segundo que pasa hasta que se pulse el pulsador, una vez pulsado el LCD debe mostrar el último valor y quedarse fijo. A ver si eres capaz.

2 comentarios

  1. Pingback: El bucle while y el pulsador | DIWO | Tecnolog&...

  2. Buenos dias, en el caso de querer hacer un blink que se pueda apagar al pulsar un boton, como podria hacerlo sin que tenga que cumplirse un loop de encendido y apagado? por que en este formato deberia estar pulsando el boton en el preciso instante que el while pregunta si el pulsador esta pulsado. Si lo pulso y lo suelto antes de que se cumplan los dos segundos del loop entonces el led seguiria blinkeando.

     

    Muchas gracias!

Los comentarios están cerrados.