Simplificar el código en arduino

Montaje de 6 diodos LED (fotografía F. Arroyo)

Simplificar el código de los programas de arduino

Ya hemos hablado en una entrada anterior de la manera correcta de conectar un diodo LED en cualquier circuito electrónico. Vamos a utilizar un conjunto de LED para ver cómo podemos simplificar el código de nuestros programas para arduino.

En la mayoría de las entradas que hemos hecho hasta ahora hemos utilizado programación gráfica. Aquí vamos a hablar primero de código escrito y después indicaremos cómo hacer lo mismo gráficamente sin necesidad de escribir nada.

Planteamos el siguiente ejercicio: instalar 6 diodos LED en círculo con sus correspondientes resistencias. Cada diodo se irá encendiendo y apagando de forma sucesiva. El efecto será una luz que va dando vueltas. Plantearemos el código de dos formas, introduciendo el uso de matrices. Esta entrada introduce código pero también plantea la solución de forma gráfica.

Lo que vamos a hacer

Título: Iluminación y apagado sucesivo de 6 LED.

Entradas: 0

Salidas digitales: 6 en los pines 3, 4, 5, 6, 7, 8 de arduino.

Como vemos, este proyecto es muy básico pues sólo utilizamos salidas digitales. El programa estará haciendo siempre lo mismo sin ninguna entrada que pueda modificar la salida.

Materiales:

6 LED de color rojo

6 resistencias de entre 220 Ω y 330 Ω

placa de arduino

1 protoboard

cables de conexión

Conexionado

La conexión de los diodos LED se muestra en el esquema siguiente.

Código de la primera opción.

Para encender y apagar sucesivamente los diodos LED, debemos escribir el siguiente código:

void setup() {
  /*aquí decimos que los pines 3, 4, 5, 6, 7 y 8 
  son salidas digitales (OUTPUT) */
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
}

void loop() {
  digitalWrite(3,HIGH);//encendemos el LED cableado en el pin 3
  delay(200);          //esperamos 200 milisegundos
  digitalWrite(3,LOW); //apagamos el LED cableado en el pin 3
  delay(200);          //esperamos 200 milisegundos
  digitalWrite(4,HIGH);
  delay(200);
  digitalWrite(4,LOW);
  delay(200);
  digitalWrite(5,HIGH);
  delay(200);
  digitalWrite(5,LOW);
  delay(200);
  digitalWrite(6,HIGH);
  delay(200);
  digitalWrite(6,LOW);
  delay(200);
  digitalWrite(7,HIGH);
  delay(200);
  digitalWrite(7,LOW);
  delay(200);
  digitalWrite(8,HIGH);
  delay(200);
  digitalWrite(8,LOW);
  delay(200);
}

Por lo tanto, el programa, aunque haya que escribir código, es muy sencillo. ¿Cómo hacemos esto con visualino (de forma gráfica)?:

Simplificar el código en arduino

Código del programa en visualino

Segunda opción. Utilización de matrices (arrays)

A continuación, introduciremos el concepto de matriz de datos (arrays) para «empaquetar» las 6 salidas a los LED en una variable y utilizando una instrucción de control (for). El código resultante es:

//definimos led como una "caja" de 6 componentes
//esa "caja" es una matriz de números, led[]

int led[]={3,4,5,6,7,8};

int numero_led=6;       //led indica el número de led que tenemos

void setup() {
  for (int i=0;i<numero_led;i++)
  {
  //definimos todos los pines como salidas en una sola línea:
  pinMode(led[i],OUTPUT);
  }  
}

void loop() {
  //en este bucle encendemos y apagamos todos los led
  for (int i=0;i<numero_led;i++)
  {
  digitalWrite(led[i],HIGH);
  delay(200);
  digitalWrite(led[i],LOW);
  delay(200);
  }   
}

Hemos simplificado mucho el número de líneas de código introduciendo los conceptos de matriz de datos y el concepto de bucle: repetimos unas instrucciones el número de veces que deseamos.

Entonces, ¿podemos hacer esto con visualino de forma gráfica?. En visualino  podemos simplificar el código pero no con matrices, cuya implementación no está completa.  Utilizaremos también bucles.  El programa en visualino quedaría así:

Simplificar el código en arduino

Programa simplificado

A veces, la realización de algunos programas en forma gráfica tiene limitaciones. Por ejemplo cuando se tratan datos en forma de matrices o se utilizan componentes que requieren librerías especiales (bloques especiales de código).

(fotografía de portada Federico Arroyo)