domingo, 3 de octubre de 2010

Arduino tutorial. Manos a la obra. Ejemplo básico.

Las promesas son deudas y se había hecho una en este blog: un tutorial sobre Arduino.
No hay escusas. No hay tiempo que perder.

El objetivo de este capítulo es ponernos en marcha. Ejecutar nuestro primer programa. En puntos posteriores habrá tiempo para entrar en detalles sobre el software y hardware de Arduino, pero creo, que para empezar, lo mejor es ver como efectivamente nuestro Arduino funciona correctamente. Instalaremos el IDE y ejecutaremos un programa sencillo. Eso nos mostrara cómo de fácil es comenzar a obtener resultados.

Instalación del IDE
Arduino es un dispositivo vivo, que se a menudo se actualiza con nuevas versiones de Software y Hardware. Con la sana intención de hacer un tutorial que no caduque a las dos días, lo mejor que podéis hacer para arrancar Arduino es seguir las instrucciones que proporciona la website del proyecto Arduino (http://arduino.cc/en/Guide/HomePage). Visitando esa web encontrareis los últimos ficheros disponibles y las instrucciones de instalación de Arduino.

Considerando que habéis seguido las instrucciones de instalación correctamente, deberéis disponer del sistema de desarrollo instalado.
Recomendación: crear un link al escritorio con el ejecutable de Arduino para poder acceder al ejecutable directamente.

Sketches
Sketch es el nombre que se le ha dado a los programas que ejecutamos en Arduino.
Con el IDE se nos proporcionan algunos sketches de ejemplo, son muy útiles para introducirnos en el mundo Arduino.
Recuerda que los programas, o sketches, de Arduino están escritos en lenguaje C. Libros de referencia básicos de lenguaje C son:

  • "The C Programming Language". Kernighan y Ritchie. Este es el libro clásico entre los clásicos.

  • "C in Nutshell". Prinz y Crawford.

Los sketches tienen la misma estructura básica, requieren, al menos, de dos funciones:

  • setup. En esta función se configura la placa, se asignan las funcionalidades a los distintas entradas/saliadas, inicializa la comunicación serie. Sólo es ejecutada una vez. Siempre tiene que estar esta función en el programa. Incluso si no ponemos nada en la función setup, tiene que estar presente.
  • Loop. Aquí se escribe el programa que se ejecutara en un bucle (loop), secuencialmente, sin interrupción.
    void setup()
    {
    declaración;
    }
    void loop()
    {
    declaración;
    }
    type NombreFunción (parametros)
    {
    declaración;
    }

Pueden crearse multitud de funciones adidicionales que se son llamadas desde loop. A medida que el programa vaya cogiendo complejidad, para hacerlo ininteligible, más fácil de mantener, esta división en funciones simples del programa, se convierte en un requerimiento necesario para poder trabajar con el programa. Divide la complejidad y venceras.

Seguidamente ponemos uno de los exemplos proporcionados por el IDE de Arduino. Veremos en él las partes que hemos mencionado anteriormente y añadiremos algunos detalles. Trabajaremos con el sketch Examples -> Basics -> Blink:


/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
void setup() {
// initialize the digital pin as an output:
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(13, LOW); // set the LED off
delay(1000); // wait for a second
}

Este sencillo ejemplo nos ayudará a identificar las distintas partes de las que está compuesto un programa.

Comentarios
Como veis, inicialemente tenemos una lineas que nos describen el programa, su funcionalidad. Cuando querramos comentar varias lineas, de forma que el compilador no entienda esas lineas como comandos, tenemos que acotarlas de la siguiente forma:
/*
comentarios
*/
Existe otra forma de comentar una sola lineas, se trata de utilizar dos contrabarras:
\\comentarios
La diferencia entre los dos métodos, tal como he comentado, es que una sirve para varias lineas y la segunda solo para una linea.
En todo caso, comentar el programa es excelente hábito. A veces, incluso a nivel profesional, se nos olvida comentar el programa. Al cabo de unas pocas lineas, el trabajo se transforma en un ente opaco, marronuzco, hasta poder convertirse en una pesadilla para cualquiera que se enfrente a él. Por tanto, desde el principio tenedlo claro, hay que comentar todo lo que hagamos, incluso lo más trivial. En el futuro, seguro que lo agradeceremos.
En el caso de nuestro ejemplo, los comentarios describen la funcionalidad del programa, activar y desactivar un pin de salida cada segundo, a ese pin hay conectado un LED en la placa de Arduino.

Setup
Esta es la función en la que configuramos la funcionalidad de los distintos pines. Más adelante explicare qué posibilidades de configuración hay en esta función, cuántos pines tenemos y cómo se pueden configurar. Por ahora, lo único que nos interesa es que:
esta función es obligatoria en todos los programas
sirve para configurar los pines del microcontrolador
la instrucción que se utiliza para configurar la mayoría de los pines es pinMode (pin, mode). Donde pin es el numero del pin que queremos configurar y el mode, es donde ponemos si queremos que sea un pin de entrada (INPUT) o de salida (OUTPUT).
En el ejemplo que estamos analizando, se configura el pin 13 como pin de salida.

Loop
Esta es la función donde alojamos las funcionalidad. Como todo los programas embebidos, es un programa que se ejecuta secuencialmente e indefinidamente. Es un bucle de instrucciones que constituye la funcionalidad de nuestra placa.
Es aquí donde tenemos que ser creativos y con las herramientas que nos da el idioma de programción C, tenemos que idear el programa que implemente la funcionalidad deseada. Ese es el juego, ese es el reto.
En nuestro ejemplo se activa el pin 13 mediante la instrucción digitalWrite (pin,valor). Donde pin es el numero del pin cuyo estado queremos cambiar. Debe ser un pin previamente configurado en la función setup. Y valor, puede ser, en este caso de señal digital, nivel alto (1 lógico o HIGH), o nivel bajo (0 lógico o LOW).
De forma que el programa ejemplo lo que hace es activar el pin 13, ponerlo a nivel alto, encendiendo el LED, espera 1 segundo y pone el pin a nivel bajo, apagando el LED. Al estar dentro de la función de loop, esta sucesión de instrucciones se ejecutan en un bucle (loop).

Proximamente más. Produndizaremos en cómo ejecutar el programa ejemplo.

Hasta pronto.

No hay comentarios:

Publicar un comentario