Funciones arduino void loop () y void setup ()

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.

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:

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.

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.