La plataforma arduino se programa en C/C++. En esta serie de instructables, vamos a ver aspectos principales de la programación, principalmente en C, pues no voy a entrar en detalles de objetos C++, aplicados a proyectos sencillos de Arduino. No me concentraré en detalles técnicos de programación, pues la intención es poder desarrollar programa básicos en Arduino, para programación mas avanzada, recomiendo algunos otros libros como Beginning C for Arduino, o C programming for Arduino. Los temas cubiertos serán:
Pueden encontrar la colección completa de instructables acá. La razón por la cual se utiliza C en Arduino, es que es pequeño y fácil de aprender. Además, es independiente del micro-controlador, y por ello el mismo código sirve para cualquier controlador. Además es un lenguaje de alto nivel que es muy legible, pero tiene funciones de bajo nivel para tener buen control de lo que hace el micro-controlador
En este instructable solo utilizaremos el Arduino. Recuerden descargar el Arduino IDE de la página de Arduino. Adjunto encontrarás el código que se va a utilizar en esta sección.
El código principal del Arduino se divide en dos partes:
En este ejemplo haremos un "Blink", es decir, una luz intermitente con el led que viene conectado al pin 13 del Arduino
Cuando se programa, se pueden escribir comentarios. En el caso del lenguaje C, los comentarios se inician con un doble slash "//". Como se ve en la imagen, una ves que hay un "//" todo lo que siga en la misma línea se considera comentarios y es omitido a la hora de compilar. En el Arduino IDE cambia a color gris.
La función "setup", que en la foto está entre las líneas 5 a 8, se ejecuta al arrancar el Arduino, y sirve para inicializar pines, variables y algunas otras cosas. Corre solamente una vez. Más adelante haremos un ejemplo para esto quede más claro.
Noten que el setup inicia con "void setup(){" y termina en "}". El significado de void lo explicaremos más adelante
Vean por ejemplo que la línea 7 que dice "pinMode(13, OUTPUT)", indica que el pin 13 es de salida. Noten que al final de cada una de estos comandos, hay un punto y coma ";", esto indica que es el final de una sentencia, comando o expresión. Esto lo explicaré en otro instrutable.
El loop es la parte principal del programa. Este ocurre repetitivamente cuando el Arduino esta funcionando. Según la velocidad de un Arduino UNO, esto correo como a 4 micro-segundos por ciclo, esto es 20 veces más rápido que la computadora que sirvió para guiar las misiones Apollo.
Noten que el loop inicia con "void loop(){" y termina en "}".
En la foto, el loop está entre las líneas 11 a 16. La línea 12, indica al Arduino con la función "digitalWrite" que debe mandar 5V (por eso HIGH) al pin 13, y por eso se escribe "digitalWrite(13,HIGH)". La línea 13 se le indica al Arduino que debe esperar un segundo (1000 mili-segundos), con el comando "delay(1000)".
Luego en la línea 14, se indica con "digitalWrite(13,LOW)" que del pin 13 debe salir un voltaje de 0, y luego hay otro delay.
Este código corre en el ciclo loop y como resultado entonces prende y apaga el led que se encuentra en el pin 13, en intervalos de 1 segundo.
En un lenguaje de programación, la sintaxis son las reglas que definen como se pueden combinar los símbolos, para escribir porciones correctas de código.
Dos cosas que estaremos utilizando desde el inicio del programa, punto y coma ";" y llaves "{" "}". A medida que escribamos código van a quedar claro donde se utilizan, por el momento tener en cuenta los siguente para cada uno de ellos.
Marcan el inicio y final de un bloque. Un bloque es una secuencia de declaraciones.
Cuando programen, aunque los irán mejorando con experiencia, consideren los siguientes aspectos de estilo:
Al tener el código listo y de forma regular, pueden presiona el botón de "verificar" código. este asegura que la sintaxis de lo escrito está bien, y les indica si hay algún error. Por ejemplo borren el punto y coma de la línea 7, y se les indicará el error:
Arduino: 1.6.5 (Linux), Board: "Arduino Uno"
Blink.ino: In function 'void setup()': Blink:8: error: expected ';' before '}' token expected ';' before '}' token
This report would have more information with "Show verbose output during compilation" enabled in File > Preferences.
Como verán la parte "expected ';' before '}' token expected" nos indica que encontró un "}", cuando al final de la línea 7 debería tener un punto y coma.
Para compilar, presionar el botón del código. Si todo sale bien, el código se carga en el arduino, y el Arduino IDE les indica:
Sketch uses 1,030 bytes (3%) of program storage space. Maximum is 32,256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2,039 bytes for local variables. Maximum is 2,048 bytes.
Es decir, les dice que utilizaron un 3% de el espacio de almacenamiento del Arduino. Si hacen un programa muy grande, van consumiendo cada vez más espacio, es decir, el espacio de almacenamiento en el arduino es limitado.
Al código del ejemplo modifique la sección de setup, y agregarle la siguiente línea después de la línea 7:
digitalWrite(13,HIGH);
delay(5000);
Notarán como al reiniciar el Arduino, el led se queda encendido por 5 segundos, antes de inicial el encendido intermitente. Eso nos muestra que setup corre solo al inicio, y que loop corre repetidamente después de setup.