loop-arduino

En esta lección vas a aprender dos cosas nuevas

  • Cómo realizar una secuencia de acciones repetidamente
  • Cómo iterar con un bucle por distintos periféricos

Vamos a necesitar lo siguiente

  • Una placa controladora de la familia Arduino
  • Cuatro LEDs

Control de flujo

La programación secuencial consiste en ejecutar un serie de órdenes o comandos uno después de otros, estos comandos pueden leer información (a través de los sensores), ejecutar acciones (por ejemplo, mover un servo), o simplemente realizar alguna operación interna (como realizar una suma).

En la lección anterior vimos un ejemplo en el que se alteraba el orden de ejecución de un programa con la sentencia if-else, estas instrucciones se llaman instrucciones de control de flujo.

Pongamos un ejemplo: imaginemos un programa donde, si la lectura de la cantidad de luz es menor de 300, enciende un LED y, de lo contrario, lo apaga. En función de una variable realizo la acción encender LED o la acción apagar LED . Esto se ve claro en la siguiente imagen

if_else

Realizando tareas repetidamente con el bucle for

El bucle for es otro modo de modificar el flujo en el que se ejecuta un programa haciendo que una serie de instrucciones se repitan un número dado de veces, por ejemplo, podría querer que un LED parpadease 10 veces yel flujo del programa sería algo así.

for

Vamos a hacer este último programa explicándolo paso a paso

Vamos a analizar por bloques

En este bloque usamos variables globales para indicar el número de PIN al que se conecta el LED. Además, creamos una variable booleana (admite los valores verdadero y falso). Utilizaremos esta variable para saber si es la primera vez que se ejecuta el programa. Es un recurso habitual en programación, al ejecutarse la función loop() una y otra vez, si queremos que un programa se ejecute solo una vez es necesario hacer esto o algo parecido.

La primera vez que se ejecute la función loop() la variable primeraVez vale true (verdadero), por ello entramos en el if, y ejecutamos lo que viene a continuación. La primera instrucción es asignar a la variable primeraVez el valor false (falso), por ello, la próxima vez que se ejecute la función loop() ya no se cumplirá la condición y se ejecutará por lo tanto digitalWrite(led_pin, LOW) dejando el LED apagado indefinidamente.

Ahora vamos a entrar a analizar el bucle for

En primer lugar

El bucle for tiene tres partes

  • Variable sobre la que se itera, y valor inicial, en este caso int i=0. Iteramos con una variable llamada i que es un entero y cuyo valor inicial será 0.
  • Condición de control, es decir, el bucle for se repetirá mientras esta condición siga siendo verdadera: i < 10 . Esta comprobación se realizará al principio de cada iteración, es decir, si la condición es falsa la primera vez, no se realiza ninguna iteración.
  • Acción a ejecutar al final de la iteración, en este caso i=i+1. Es decir, después de cada iteración i se incrementa una unidad (podría ser cualquier otra operación). Es importante notar que esto se realiza al finalizar la iteración, por lo que en la primera iteración, i vale 0.

De este modo la secuencia de ejecución seŕia

  • i=0, ¿ i < 10 ? : sí, parpadeo una vez, incremento i. Luego i=1
  • i=1, ¿ i < 10 ? : sí, parpadeo una vez, incremento i. Luego i=2
  • i=2, ¿ i < 10 ? : sí, parpadeo una vez, incremento i. Luego i=3
  • i=9, , ¿ i < 10 ? : sí, parpadeo una vez, incremento i. Luego i=10
  • i=10, , ¿ i < 10 ? : No, salgo del bucle for.

Iterando con el bucle for

Otro uso de los bucles for es utilizar la variable de control, en el ejemplo anterior i para realizar alguna operación, por ejemplo, ¿recordáis las luces del coche fantástico?, vamos a hacer que 5 LEDs se enciendan de modo secuencial, de modo que se encienda cada vez uno más y luego se apaguen todos.

Supongamos que los LEDs están conectados a los pines del 2 al 6, la secuencia seŕia

  1. Todos apagados
  2. LED 2 encendido
  3. LEDs 2, 3 encendidos
  4. LEDs 2, 3, 4 encendidos
  5. LEDs 2, 3, 4, 5 encendidos
  6. LEDs 2, 3, 4, 5, 6 encendidos

y esto una y otra vez

¿cómo sería el código?

En la función setup() ponemos todos los pines en los que hay LED en modo OUTPUT. En lugar de hacerlo uno por uno lo hacemos con un for, ahorrando código. Esto sería equivalente a hacer

En la función loop() primero apagamos todos los LED (del mismo modo) y luego pausamos 100 milisegundos. Posteriormente vamos encendiendo uno a uno con una cadencia de 200 milisegundos, consiguiendo el efecto deseado.

Una vez que se han encendido todos volvemos a empezar con el loop(), es decir, volvemos a apagar y a encender uno detrás de otro, y así indefinidamente.

¿Cómo sería un programa que en lugar de apagarlos todos de golpe los va apagando secuencialmente?, se decir, enciende uno a uno con una cadencia de 200 milisegundos, y después los va apagando en orden inverso.

Para obtener más información sobre el for consulta la referencia de Arduino.

Ejercicio

¿Recuerdas el ejercicio propuesto al final de la entrada sobre las sentencias condicionales if-else? A continuación puedes ver la solución. No dudes en contactar con nosotros si no entiendes algo.