Estructura de un sketch en Arduino, introducción a la programación Deja un comentario

En este artículo vamos a ver lo primero que te encontrarás cuando quieres crear una rutina, programa o sketch en el lenguaje nativo de Arduino. El código que cargamos en nuestra placa, generalmente lo llamamos sketch, y así lo nombraré a lo largo de este artículo. En este caso he plasmado un ejemplo que viene incorporado con el IDE oficial salvo ciertas modificaciones que me permiten poder explicarte la estructura de un sketch en Arduino. A grandes rasgos podemos encontrar 3 bloques bien diferenciados.

En la cabecera encontramos la importación y declaración de variables y constantes. En la función setup sirve para dar valores iniciales a las variables y establecer los modos de los pines (entrada o salida) y por último la función loop es el bucle que se ejecuta infinitamente y donde reside el grueso de nuestro código, la funcionalidad del sketch.

Vamos a verlo con un simple ejemplo, el código del blink modificado donde el objetivo es hacer parpadear un LED en el pin número 13. Aquí tienes el código.

Lo primero que nos encontramos son comentarios. Tenemos de dos tipos: los que comienzan por // que comentan una línea y los que empiezan por /* y terminan */ que son multilinea, comentan todo lo que este entre esta marcas. Los comentarios son muy importantes ya que nos facilitan la lectura del código, nos explica lo que el programador se propone hacer o nos marcan una región del programa.

Tras los comentarios iniciales encontramos como incluir una librería con la siguiente sintaxis:

Como puedes ver, tenemos que poner la palabra clave include tras el símbolo # y el nombre de la librería siempre entre < >. Las librerías son archivos que añaden funcionalidad a nuestros programas. Pueden ser de terceros o puedes crearte tus propias librerías donde por ejemplo tengas funciones más comunes en tus programas . En este caso es una librería propia que no existe en el IDE y que por lo tanto si compilas te dará un error.

Antes de llegar a las funciones, en esa parte de nuestro sketch definiremos las constantes y/o variables globales que vayamos a utilizar:

En este ejemplo hemos creado una constante numérica llamada ledPin la cual va a tener siempre el valor 13 durante toda la ejecución del programa y va a ser accesible a cualquier función que exista en nuestro sketch. Tras esta tenemos la variable global numero, también numérica y con valor inicial 5. Esta variable también es accesible por cualquier función de nuestro programa, (aquí es donde se diferencia con las variables locales que son solo accesibles en la función que se definan), pero su valor lo puede modificar cualquier función del sketch, al contrario que las constantes.

Y llegamos a la primera función en todo sketch de Arduino: void setup. La palabra reservada void nos indica que esta función no devuelve nada y el nombre de la función setup también nos da una ligera idea para que sirve esta función, en esta función inicializaremos todos los componentes que vayamos a utilizar. Al igual que el resto de lineas comentadas anteriormente, esta función tan solo se ejecuta una vez al encender nuestra placa, o tras la reprogramación o tras pulsar el botón reset.

Como veis para este caso, estamos diciéndole a nuestra placa de Arduino que el pin 13 (a través de la constante ledPin) este en modo salida mediante el método pinMode().

La siguiente rutina void loop(), es nuestro programa principal. Es un bucle que se ejecuta una y otra vez hasta que desconectemos la alimentación a nuestra placa. Aquí estará el alma de nuestro programa. Las primeras líneas las reservaremos para definir las variables locales que vamos a utilizar (solo accesibles en esta funcón) y tras ellas implementaremos la lógica del sketch.

En el caso que tenemos encendemos y apagamos el LED mediante el método digitalWrite() y con el método delay() hacemos una pausa de dos segundos (2seg son 2000ms).

En este skecth de ejemplo he añadido una función para que veáis cómo funciona la llamadas a otras funciones, se llama OtraFuncion(). Como ves esta función si que nos devuelve un valor, que asignamos a la variable local dy y le pasamos al método delay(dy) para hacer la segunda espera antes de volver a repetirse la función de bulce.

Las funciones que definamos en nuestro sketch no tienen obligatoriamente que devolvernos algo, pueden ser como las funciones principales de tipo void. Este tipo de funciones las podemos utilizar para realizar particularidades de nuestro programa y así tener un código más limpio y estructurado que siempre sera más fácil a la hora de depurar errores. Da igual si la declaras antes o después de las funciones setup y loop, o incluso en medio. Al ser un lenguaje compilado no afecta la situación donde la pongas y va a funcionar exactamente igual, aunque si por mero hecho de estructura limpia hay que ser ordenado.

En este caso nos devuelve un numero y por eso en la definición de la función lo marcamos con la palabra reservada int. En esta función tenemos una variable local llamada aux que mediante el método random le asignamos un valor aleatorio entre 1000 y 2000. Tras obtenerlo devolvemos el resultado mediante la palabra reservada return. Así en nuestro programa principal hará una espera de entre 1 segundo y 2 segundos.

Cualquier skecth de Arduino sigue esta estructura. Si he pasado algo por alto o te queda alguna duda, deja un comentario y lo vemos!

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?