Funciones arduino void loop () y void setup ()

Las funciones void loop () y void setup () suelen ser las primeras funciones con las que comenzamos a familiarizarnos con la programaci贸n para arduino.

En este art铆culo aprenderemos para qu茅 sirven estas funciones, c贸mo se utilizan y trataremos de encontrar una soluci贸n a errores como 芦redefinition of void setup ()禄 que a menudo se produce entre los novatos en los proyectos de arduino.

C贸mo iniciar un programa en Arduino

Cuando conectamos la placa Arduino a la fuente de alimentaci贸n, se inicia una actividad de firmware dentro de la placa. El microcontrolador est谩 configurado de tal manera que al arrancar el sistema el control recibe el programa del bootloader.

Lo primero que hace el bootloader es comprobar si en el plazo de 1-2 segundos el usuario env铆a un nuevo programa. Si se inicia el proceso de reprogramaci贸n, el c贸digo se carga en la memoria y se le da el control. Si no hay nuevos programas, el bootloader ejecuta el programa previamente guardado.

Una vez ejecutado el programa, Arduino realiza una serie de operaciones rutinarias para inicializar y configurar el entorno y s贸lo entonces procede a ejecutar el mismo c贸digo que contienen nuestros sketches.

As铆, Arduino nos libera de la necesidad de recordar todos los detalles de la arquitectura del microprocesador y nos permite centrarnos en la tarea que tenemos por delante (esto no significa que no debamos entender lo que est谩 ocurriendo entre bastidores, pero hablaremos de ello en un art铆culo aparte).

Para ilustrar lo anterior, veamos un fragmento de c贸digo fuente de Arduino, en el que llamamos a nuestra funciones.

void setup() {
  //Iniciamos la comunicaci贸n serial
  Serial.begin(9600);
}

void loop() {
  //Imprimimos una secuencia de 3 n煤meros...
  Serial.println("1");
  Serial.println("2");
  Serial.println("3");
}

Por qu茅 es necesaria la funci贸n void setup()

Al descargar el programa, Arduino da a nuestro c贸digo la oportunidad de participar en la inicializaci贸n del sistema. Para ello, debemos especificar al microcontrolador los comandos que ejecutar谩 en el momento del arranque y luego olvidarnos de ellos (es decir, estos comandos s贸lo se ejecutar谩n una vez al inicio del sistema).

Y es por ello que en nuestro programa tenemos que seleccionar el bloque en el que se almacenar谩n estos comandos. Void setup(), o m谩s bien el espacio dentro de los corchetes de esta funci贸n, es el lugar dentro del sketch de Arduino donde 茅sto sucede.

Sintaxis void setup()

La sintaxis de la funci贸n de configuraci贸n es muy simple:

void setup() {
// aqu铆 ponemos los comandos de la subrutina
}

En este ejemplo, la palabra setup es el nombre de la funci贸n. La palabra que precede al nombre describe el tipo de datos que deben devolverse. En este caso, la subrutina no devuelve ning煤n dato, por lo que debemos especificar la palabra void. Todos los comandos deben colocarse entre corchetes {}.

隆No te olvides de poner corchetes! La falta de un corchete har谩 que todo el programa sea incomprensible para un Arduino.

Ejemplos de void setup()

En la mayor铆a de los casos, las siguientes instrucciones se especifican dentro de la configuraci贸n void setup:

  • pinMode con el n煤mero y tipo de pin. Esta l铆nea define el modo de operaci贸n de los pines de Arduino.
  • Serial.begin con indicaci贸n de velocidad (la mayor铆a de las veces 9600). Esta instrucci贸n inicializa la operaci贸n del puerto serie a la velocidad especificada.
  • Instrucciones sobre c贸mo conectar e inicializar varios objetos de la librer铆a arduino. Por ejemplo, servo.atach(6) indicar谩 a la biblioteca que hemos conectado el servo drive al pin 6, y todas las acciones posteriores del c贸digo de la biblioteca se realizar谩n con este puerto.
  • Inicializaci贸n de variables globales si por alguna raz贸n no podemos hacerlo al definir las variables en el campo de visi贸n global.

Ejemplo:

void setup(){
   Serial.begin(9600);
   pinMode(13, OUTPUT);  // Usaremos el pin 13 como salida. Los dem谩s puertos son entradas por defecto.
   pinMode(2, PULLUP);   // Definimos al pin 2 como entrada con una resistencia pull-up
   servo.atach(9);       // Si hemos declarado un objeto de clase Servo ahora especificamos que el servo estar谩 conectado al puerto 9.
}

Error en Arduino: Redefinition of void setup()Uno de los errores m谩s comunes al momento de compilar el c贸digo es el error 芦redefinition of void setup ()芦.

Lo que sucede basicamente es que tenemos declarada m谩s de una vez la funci贸n void setup, y se produce generalmente cuando conectamos un m贸dulo o un sketch que ya tenga esta funci贸n, o cuando tenemos un sketch con 2 (o m谩s) solapas y en ambas declaramos la funci贸n.

Esto causa un error de compilaci贸n que se soluciona de forma f谩cil unificando las 2 declaraciones en una s贸la.

Funci贸n void loop()

La funci贸n de bucle o 芦Void Loop禄 es la funci贸n principal, el punto de entrada a nuestro programa. Es el lugar donde tenemos que poner los comandos que se ejecutar谩n mientras la placa Arduino est茅 habilitada. Comenzando con el primer comando, el microcontrolador ir谩 hasta el final y saltar谩 inmediatamente al principio para repetir la misma secuencia. Y as铆 un n煤mero infinito de veces (siempre y cuando la placa tenga suministro el茅ctrico).

Ejemplo de void loop()

Un ejemplo tan familiar del bosquejo del proyecto Blink (faro). Si no fuera por la funci贸n delay(), nunca nos habr铆amos dado cuenta de que el LED estaba apagado, porque una vez que llegaba al final, el sketch comenzaba desde la primera l铆nea, en la que se encend铆a inmediatamente.

void loop(){
 digitalWrite(13, HIGH);
 delay(1000);
 digitalWrite(13, LOW);
 delay(1000);
// Al llegar aqu铆, el Arduino volver谩 a la primera l铆nea y comenzar谩 a ejecutar todas las instrucciones nuevamente. 
}

En Resumen

Con la ayuda de las funciones void loop() y void setup() en nuestro sketch, damos las instrucciones al microcontrolador de arduino. Todo lo que se encuentra dentro del bloque de configuraci贸n (setup) se ejecutar谩 una vez. El contenido del bloque de bucle (loop) se ejecutar谩 en el bucle mientras el controlador Arduino permanezca encendido.

Otros art铆culos relacionados de聽nuestro Curso Arduino聽que pueden interesarte: