Introducción a la programación en Arduino
Todo programa (sketch) escrito para Arduino tiene dos funciones básicas: setup y loop.
Usaremos la función setup para inicializar variables y establecer un punto de partida de nuestro sketch. La función loop contendrá la actividad central de nuestro código, que se ejecutará en un bucle infinito mientras la placa Arduino tenga alimentación eléctrica.
¿ Y por qué un bucle infinito forzoso? Muy sencillo. Nuestro Arduino tiene que estar continuamiente ejecutándose para comprobar el estado de los sensores y actuadores conectados. Así, dependiendo del estado de estos se actuará de una forma u otra cada vez.
Una vez indicado el esqueleto básico de un sketch (programa), vamos a enumerar los tipos principales con los que podremos crear variables: boolean, char, byte, int, long, float, double, string (array de char), String (objeto) y array. De los tipos primitivos anteriores derivan los tipos unsigned, como unsigned int o unsigned long.
Para delimitar una instrucción de nuestro programa usaremos el símbolo de cierre «;». Para poner comentarios en nuestro código usaremos «//» para comentarios de una línea o «/* codigo */» para varias líneas. Finalmente, las cabeceras #define y #include nos servirán para declarar constantes y añadir librerías, respectivamente.
Operaciones Aritmético-lógicas
Existe una seria de constantes muy importantes para trabajar en Arduino. Las más usadas son:
- HIGH y LOW: Representan una corriente a nivel alto (un 1 en digital) o a nivel bajo (0 en digital)
- INPUT y OUTPUT: Para indicar si un elemento es de entrada (sensor) o de salida (actuador)
- true y false: Representan verdadero y falso
Para las operaciones aritméticas disponemos de los siguientes operadores:
- Asignación: =
- Suma: +
- Resta: –
- Multiplicación: *
- División: /
- Módulo (resto de división): %
Para realizar operaciones de comparación y operaciones lógicas tenemos los siguientes:
- Igual a: ==
- Distinto de: !=
- Menor que: <
- Mayor que: >
- Menor o igual que: >=
- Mayor o igual que: <=
- Y lógico (AND): &&
- O lógico (OR): ||
- Negación lógica (NOT): !
Estructuras de control
Una vez presentados los tipos de datos básicos y cómo compararlos, pasamos a ver las estructuras de control que permitirán modificar el flujo de nuestro programa:
- if: Representa una condición lógica que debe cumplirse. Si se cumple, se ejecutarán una serie de instrucciones de nuestro código
- else: Representa una condición que no se cumple. Se suele usar junto a un if, para establecer la situación de «if-else». Es decir, si condición X ejecuto A, si no se cumple X, ejecuto B
- for (condición): Bucle en el que se ejecutarán una serie de instrucciones concretas, y se repetirá hasta dejar de cumplir la condición definida
- while (condición): Bucle mientras en el que se ejecutarán instrucciones mientras se cumpla la condición
- break: salir de un bucle
- continue: pasar a la siguiente iteración de un bucle
- return: salir de una función devolviendo un valor
Operaciones digitales y analógicas
Recordemos brevemente qué son la electrónica digital y analógica. Un dispositivo digital es aquel que se basa en una onda cuadrada, que sólo tiene dos posibles estados: 0 (apagado) y 1 (encendido). Un dispositivo analógico está basado en una onda sinusoidal que puede tomar gran cantidad de valores.
Por último, vamos a plantear las funciones básicas para tratamiento de entrada-salida digital y analógica:
- pinMode(pin, mode): establece el comportamiento de un pin de Arduino concreto
- pin: entero positivo que indica el puerto de la placa al que está conectado
- mode: constante OUTPUT o INPUT para indicar si el dispositivo conectado es de entrada o salida a la placa
- digitalRead(pin): lee el valor digital del sensor conectado en «pin». Devuelve HIGH o LOW
- pin: puerto de la placa Arduino al que está conectado el sensor
- digitalWrite(pin, value): escribe un valor digital al actuador conectado en «pin»
- pin: puerto de la placa Arduino al que está conectado el actuador
- value: valor HIGH o LOW para indicar si mandamos un valor de tensión alto o bajo al dispositivo
- analogRead(pin): lee el valor analógico del sensor conectado en «pin». Devuelve un valor entre 0 y 1023
- pin: puerto de la placa Arduino al que está conectado al sensor
- analogWrite(pin, value): escribe un valor analógico al actuador conectado en «pin», muy útil en PWM
- pin: puerto de la placa Arduino al que está conectado el actuador
- value: valor entre 0 y 255 enviado al dispositivo actuador
Modulación por Ancho de Pulsos (PWM)
Para entender bien cómo trabaja la función analogWrite() explicaremos superficialmente el funciomiento de PWM, o Modulación por Ancho de Pulsos.
Supongamos una onda eléctrica cuadrada, en la que tendremos los valores HIGH y LOW. Esta técnica nos permitirá modificar el ancho de cada ciclo de la onda para hacerlo más largo o más corto. El resultado de esta técnica aplicada a un led supondría establecer la intensidad lumínica.
Más despacio, ¿quieres?. Imaginad que esta onda circula a una velocidad muy muy grande. Si pasa mucho tiempo en estado alto supondrá que estará mucho rato «encendida» y por tanto estaremos más tiempo viendo el led brillar.
Sin embargo, si estamos mucho tiempo en estado bajo, la luminosidad del led desprendida será menor. Entendamos este fenómeno como un efecto óptico. Nuestro ojo integra las imágenes como si fuesen fotogramas. Cuantos más fotogramas vea con luminosidad, mayor será la intensidad del color del led.
¿Todo esto para explicar la función analogWrite()? Sí. Esta función es imprescindible para poder trabajar con dispositivos analógicos, que suponen una de las complicaciones iniciales en Arduino. Así, los valores 0 y 255 supondrán un led totalmente apagado o totalmente encendido, respectivamente. Si vamos aumentando el valor iremos viendo que la luminosidad crece de forma constante.
Para completar la información anterior tenéis la referencia al lenguaje Arduino en la web del proyecto. En ella se desarrolla cada uno de los elementos del lenguaje citados.
Estudiante de Ingeniería Informática en la intensificación de Tecnologías de la Información. Universidad de Murcia.
Redes de Comunicaciones, Seguridad e Internet of Things.
Pingback: Programando con LED (Vídeo) - ¡Que viene IPv6!