Como digimos anteriormente, arduino ejecuta las
instrucciones recibidas una a continuación de otra de forma secuencial,
pero esta se cuencia se puede modificar con el uso de las estructuras de
control de flujo. Estas estructuras las utilizamos para que arduino,
repita una misma instrución o ejecuta una u otra instrucción en función
de un resultado. Hay varias estructuras de control, pero aquí solo nos
vamos a centrar en el bucle for.
El bucle for es el más difícil de entender de todas las estructuras de control y es por eso que nos vamos a centrar aquí en él.
Su sintaxis es la siguiente:
int i=0;
for (i=n; i<m; i++)
{
codigo a repetir
}
Vayamos por parte:
int
es un tipo de dato, en este caso se refiere a un número entero, es
decir, un número no decimal que puede ser positivo, negativo o cero.
i
es el nombre elegido para una variable, una variable es un "cajón" en
la memoria de arduino, donde se a guardar un valor, para que arduino lo
use más tarde y si es necesario lo cambie por otro valor.
=
este signo no significa igual, en programación igual se escribe "==".
Este signo significa asignación, se asigna un valor a una variable
mediante el signo de asignación.
En
resumen la primera línea se está declarando una variable de tipo
entero llamada i a la que se le asigna inicialmente el valor cero. Como
es de tipo entero, no puede contener números decimales, ni letras,
etc... solo números enteros.
for es un bucle en el que se va a repetir el código que está entre las llaves un número finito y conocido de veces.
Con
i=n siendo n un número entero ya que i solo puede contener números
enteros. Con eso le decimos a for en que número empieza la primera vez,
puede empezar en cero, en menos 5, en 12 en lo que queramos.
Con
i<m siendo m un número entero, ya que i solo puede conetener números
enteros. Con eso le decimos a for, que siga repitiendo el código
mientra que la variable i sea menor que el número m, cuando la variable i
alcance el número m no se producirá más repeticiones. El número m lo
elige el programador, es decir, nosotros, eso nos permite controlar el
número de repeticiones que queremos que se haga. El signo < se puede
cambiar por mayor que, igual mayor o igual, menor o igual, etc.
Por
ejemplo si n es 5 y resulta que m es 8, el código entre llaves se
repetirá 3 veces, porque cuando i sea igual a 8, ya no sera menor que 8 y
entonces no se producirá la repetición.
Con
i++ estamos diciendo que cuando compruebe el valor n y el valor m sume
una unidad al valor n de forma que si al principio n valia 5, después de
que se ejecute el código la primera vez, n pasará de 5 a 6 y arduino
coparará 6 con m y si es menor que n volverá a repetir el código y
sumará uno al 6 y así hasta que deje de ser menor que m.
Se puede poner i-- con eso en lugar de sumar uno, se resta 1, pero entonces la comparación será mientras que i sea mayor que m
Veamos un ejemplo práctico
En este ejemplo vemos que en el setup, se va a ejecutar la intrucción pinMode 8 veces. Pero empecemos por el principio.
se
declara una variable de tipo entero llamada i y se le asigna el valor 0
en un principio. Luego se coloca el bucle for, donde se le dice, que
cambie el valor de i que es 0 por un 5, luego le decimos que compruebe
que 5 es menor que 13 y si es correcto, que ejecute el pinMode,
asignando al pin 5 como una salida, luego finalmente le sume 1 al cinco,
con lo cual cambia en la i el valor 5 por el 6 y empezamos de nuevo,
compara si 6 es menor que 13 y si es
correcto, que ejecute el pinMode, asignando al pin 6 como una salida,
luego finalmente le sume 1 al seis, con lo cual
cambia en la i el valor 6 por el 7 y empezamos de nuevo. Cuando la suma
de 1 haga que la i pase a valor 13, y compruebe que 13 no es menor que
13 entonce no ejecutará el código y se saldrá de bucle continuando con
el programa.
La
instrucción for no lleva punto y coma al final. Esto es porque se
aplica al bloque de instrucciones que le sigue entre llaves, como es el
caso de loop(). La iteración o repetición realiza las instrucciones que
siguen a la linea del for, proque al estar entre llaves, están dentro
de un bloque de instrucciones.
Las instrucciones que llevan asociadas un bloque de código no lleva punto y coma al final.
En
el caso de que el bloque de código solo tenga una instrucción, se
pueden omitir las llaves de inicio y final de bloque como ocurren en la
función setup, sin embargo podemos ver esta llaves en la función loop.
Se
puede poner un for a continuación de otro, sirviendo la primera
variable para ambos for. Tambien se pueden poner un for dentro de otro
de forma recursiva, de forma que el for de dentro se ejecutará tantas
veces como el for de fuera lo permita.