sábado, 22 de noviembre de 2014

Uso de bucles. La instrucción for

Ejemplo 1_2

En esta entrada quiero explicar un tipo de bucle muy típico en programación. Se trata del bucle
for.
Este tipo de recurso se usa cuando queremos repetir n  número de veces un evento dentro del programa. Repetirlo a base de copiar el mismo código n veces cómo el día anterior tiene varios inconvenientes:
-        Es muy pesado, efectivamente, y aunque uses el clásico copiar y pegar,
-        También es ineficiente desde un punto de vista de programación, puesto que hace el código más largo, y la memoria de nuestro Arduino está muy limitada.
¿Cómo quedaría la secuencia de encendido, nuestro  void loop, con este recurso? Primero un vistazo al código anterior:


void loop()
{
  digitalWrite(2,HIGH);
  delay(d);
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(d);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  delay(d);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(d);
  digitalWrite(5,LOW);
}


Y ahora usando el for,  el ejemplo completo:




//Ejemplo1.2 versión para explicar el uso del for para realizar procesos repetitivos
//sobre el ejemplo anterior de "la ola ". La declaración de entradas y salidas es la misma
//el cambio será a la hora de encenderlas que lo haremos usando la instrucción for

int d=1000; // constante de tipo integer, que define el tiempo de delay

void setup()

{
  pinMode(2,OUTPUT); //Pin 2 conectado al led 1, definido como salida
  pinMode(3,OUTPUT); //Pin 3 conectado al led 2, definido como salida
  pinMode(4,OUTPUT); //Pin 4 conectado al led 5, definido como salida
  pinMode(5,OUTPUT); //etc...
}

Void loop()
{
For ( int a = 2;  a < 6; a++)
{
digitalWrite(a,HIGH);
delay (d);
digitalWrite(a,LOW);
delay (d);
}
}
                 
Analicemos el bucle:
for ( int a = 2; a < 6 ; a++ )
   {
digitalWrite(a, HIGH);
delay(d);
digitalWrite(a, LOW);
delay(d);
   }
}



Detrás de la instrucción for, entre paréntesis expresamos las condiciones del bucle.
Primero definimos una variable, a, y le asignamos un valor inicial.  Seguidamente le decimos cual es la condición que debe cumplir esa variable para salir del bucle, que sea más pequeña que 6, y cuanto tiene que incrementar en cada repetición, en este caso contar de 1 en 1, a++.
Después entre corchetes se encuentra las acciones que se realizarán todas las veces que se ejecute el bucle. Cómo tenemos los leds conectados entre los pines 2 y 6 lo que hacemos es dar una variable, el valor inicial de 2 e ir incrementándolo hasta llegar al último. Este código es equivalente al anterior, pero se aprecia rápidamente que incrementar el nº de leds es muchísimo más sencillo. También observamos que incrementar el número de salidas no incrementa la longitud del código.

El ejemplo para descarga, lo tienes en el enlace. Como siempre, intenta teclearlo tú:

Ejercicio 1.2 de arduino práctico

Los bucles también se pueden definir para realizar una cuenta regresiva. En ese caso utilizaremos el valor a--. En nuestro ejemplo, el bucle podría quedar de la siguiente manera:


for ( int a = 6; a <  2 ; a-- )
   {
digitalWrite(a, HIGH);
delay(d);
digitalWrite(a, LOW);
delay(d);
   }
}

Esta versión la tienes disponible en el siguiente enlace:

Ejercicio 1.2b de Arduino práctico

En este caso, los leds describirían la secuencia en sentido inverso, y con la sentencia a— en cada paso restaremos 1, hasta llegar a 2.

Pincha en el video para apreciar la diferencia:

No hay comentarios:

Publicar un comentario