Introduction: C/C++ En Arduino: Setup Y Loop

About: Músico, matemático, computación, ciencia... insolente y subversivo, pero siempre propositivo

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:

        1. Setup y Loop (en este intructable)
        2. Variables
        3. Pines en Arduino
        4. Monitor y graficador serial
        5. Condicionales if... else
        6. Uso de librerías y objetos
        7. Ciclos for y arreglos
        8. Casos con switch... case
        9. Funciones
        10. Ciclos while
        11. Librería math.h

        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

        Step 1: Materiales

        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.

        Step 2: Código Principal

        El código principal del Arduino se divide en dos partes:

        1. Setup: que se ejecuta cada vez que se enchufa el Arduino, o se apreta el botón reset, y ocurre solo una vez
        2. Loop: el código acá adentro se corre de manera repetitiva y a la velocidad del procesador

        En este ejemplo haremos un "Blink", es decir, una luz intermitente con el led que viene conectado al pin 13 del Arduino

        Step 3: Comentarios En El Código

        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.

        Step 4: Función Setup

        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.

        Step 5: Función Loop

        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.

        Step 6: Algo De Sintáxis, Puntuación Y Escritura De Código

        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.

        Punto y coma ";"

        1. se usa al final de una declaración (statement). Una declaración es la porción de código más pequeña que implica una acción concreta del controlador.
        2. No se usan en comentarios que inician con "//"
        3. No se usan en definiciones de funciones como void setup(){
        4. no se utilizan después del cierre de llaves "}"

        Llaves "{" y "}"

        Marcan el inicio y final de un bloque. Un bloque es una secuencia de declaraciones.

        Programar con estilo

        Cuando programen, aunque los irán mejorando con experiencia, consideren los siguientes aspectos de estilo:

        1. Legibilidad: Que sea fácil de leer y entender cada paso
        2. Solidez: Anticipar posibles problemas
        3. Ergonomía: Usar el código con facilidad en múltiples aplicaciones
        4. Portabilidad: Que su diseño sea aplicable a varias plataformas de programación de controladores
        5. Mantenibilidad: Que tan fácil es de mantener con el tiempo
        6. Eficiencia: Que tan bien maneja memoria y recursos del controlador

        Step 7: Verificar Y Compilar

        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.

        Step 8: Modificación

        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.