Вы находитесь на странице: 1из 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Diseo modular en Arduino


Una buena plataforma para comenzar con diseo electrnico modular es Arduino, aunque su
IDE sea mejorable en este sentido no es difcil empezar a trabajar con mdulos y libreras en
nuestros proyectos, vamos a empezar por usar libreras creadas por terceras personas, lo que
se suele llamar Contribuido:
En primer lugar vamos a nuestro sketchbook de Arduino y a la carpeta libraries, en esta carpeta
colocaremos los directorios de cada librera.
Una vez pongamos las libreras que queramos ah ya podremos acceder a ellas desde el IDE de
Arduino, en l veremos algo como esto:

Pgina 1 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO


Ya tenemos por dnde empezar, es muy til en diseo electrnico utilizar libreras de
componentes electrnicos que se comunican con el procesador, estas libreras proveen de un
acceso sencillo a los componentes, consiguiendo de esta forma una programacin orientada a
componentes.
Lo siguiente que vamos a hacer es dividir nuestro programa en mdulos, aunque Arduino
utiliza su propio lenguaje de programacin podemos usarlo como si fuera C o C++, por esto
podemos utilizar archivos .cpp para aadir cdigo y archivos .h para enlazar este cdigo
con el archivo principal que ser el .ino.
Vamos a la carpeta de nuestro proyecto donde podremos ver nuestro archivo principal .ino,
vamos a crear un nuevo mdulo que vamos a llamar datos, por lo tanto creamos dos
archivos, datos.cpp y datos.h, en el primero pondremos el cdigo las funciones que vamos
a crear y en el segundo las cabeceras de las funciones creadas anteriormente, slo si vamos a
hacer uso de ellas en el exterior del mdulo.
Nos tenemos que asegurar que el archivo de cabeceras no se incluya en el proyecto ms de
una vez, para eso usamos:
#ifndef datos_h
#define datos_h

Al principio del archivo .h y:


#endif

Al final.
Por ltimo vamos a nuestro programa principal, si reiniciamos Arduino IDE ya nos abrir los
archivos que hemos creado en diferentes pestaas. Ahora los incluimos en nuestro programa
principal usando:
#include "datos.h"

Y ya podremos acceder a los mdulos que hemos creado.


Un consejo, si utilizis libreras dentro de mdulos y no estn muy bien hechas os dar error,
para solucionarlo lo que hago es incluirlas tambin en el programa principal, pero tenis que
aseguraros de que las libreras tienen un #ifndef como se ha explicado anteriormente.

Pgina 2 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Escribir una librera para Arduino


Este documento explica cmo crear una librera para Arduino. Se inicia con un programa de
cdigo Morse y explica cmo convertir sus funciones en una librera. Esto permite que otras
personas usen el cdigo que has escrito y puedan actualizarlo facilmente a medida que mejora
la librera.
Comenzamos con un programa de cdigo Morse:
int pin = 13;
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
punto(); punto(); punto();
raya(); raya(); raya();
punto(); punto(); punto();
delay(3000);
}
void punto() {
digitalWrite(pin, HIGH);
delay(250);
digitalWrite(pin, LOW);
delay(250);
}
void raya() {
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(250);
}

Si ejecuta este programa, se representar el cdigo de SOS (llamada de auxilio) en el pin 13.
El programa tiene unas pocas partes que tendremos que poner en nuestra librera. En primer
lugar, tenemos las funciones punto() y raya() que hacen el parpadeo. En segundo lugar,
tenemos la variable ledPin que indica el pin a utilizar. Por ltimo, est la llamada a pinMod ()
que inicializa el pin como salida.

Pgina 3 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Vamos a empezar a convertir el programa en una librera


Para una librera necesita al menos dos arcivos: un archivo de cabecera (con extensin. H) y el
cdigo fuente (con extensin. cpp). El archivo de cabecera contiene definiciones para la
librera: bsicamente un listado de todo lo que hay dentro, mientras que el archivo del cdigo
fuente tiene el cdigo real. Vamos a llamar a nuestra librera "Morse", por lo que nuestro
archivo de cabecera ser Morse.h. Echemos un vistazo a lo que contiene. Puede parecer un
poco extrao al principio, pero tendr ms sentido una vez que vea el cdigo fuente que lo
acompaa.
El archivo de cabecera consiste bsicamente en una clase con una lnea para cada funcin de la
librera, junto con las variables que se van a usar:
class Morse {
public:
Morse(int pin);
void punto();
void raya();
private:
int _pin;
};

Una clase es simplemente una coleccin de funciones y variables agrupadas en un mismo


lugar. Estas funciones y variables pueden ser pblicas, lo que significa que las podrn usar las
personas que estn utilizando la librera, o privada, lo que significa que slo se puede acceder
a ellas desde la propia clase. Cada clase tiene una funcin especial conocida como constructor,
que se utiliza para crear una instancia de la clase (o sea, un objeto). El constructor tiene el
mismo nombre que la clase, y no devuelve nada.
Se necesitan un par cosas ms en el archivo de encabezado. Una de ellas es una instruccin #
include que da acceso a los tipos estndar y las constantes del lenguaje Arduino (esto se
agrega automticamente a los programas normales, pero no a las libreras). Se parece a esto (y
se coloca antes de la definicin de la clase mostrada anteriormente):
Include "WProgram.h"

Por ltimo, es comn aadir las siguientes lineas de cdigo :


Ifndef Morse_h
Define Morse_h
// La declaracin # include y el cdigo van aqu ...
endif

Pgina 4 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Bsicamente, esto evita problemas si alguien accidentalmente usa dos veces el #include con la
librera que estamos construyendo, evitando que se declaren las variables y funciones ms de
una vez.
Por ltimo, se suele poner un comentario en la parte superior de la librera con su nombre, una
breve descripcin de lo que hace, quin lo escribi, la fecha y el tipo de licencia.
Echemos un vistazo a la cabecera completa:
/*
Morse.h - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
/
ifndef Morse_h
define Morse_h
include "WProgram.h"
class Morse {
public:
Morse(int pin);
void punto();
void raya();
private:
int _pin;
};
endif

Vamos a repasar las distintas partes del cdigo fuente de Morse.cpp.


Lo primero son un par de # include. Con esto el resto del cdigo tendr acceso a las funciones
estndar de Arduino, y a las definiciones definidas en Morse.h:
Include "WProgram.h"
Include "Morse.h"

A continuacin viene el constructor. Una vez ms, en el constructor se establece lo que debe
ocurrir cuando alguien crea una instancia de la clase. En este caso, el usuario especifica el pin
que le gustara utilizar. Configuramos el pin como salida en una variable privada para su uso en
las otras funciones:
MORSE:: Morse (pin int) (

pinMode (pin, OUTPUT);

_pin = pin; )

Pgina 5 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Hay un par de cosas extraas en este cdigo. La primera es el Morse:: antes del nombre de la
funcin. Esto indica que la funcin es parte de la clase Morse. Vers esto en otras funciones de
la clase. Lo segundo es el subrayado en el nombre de nuestra variable privada, _pin. Esta
variable puede tener cualquier nombre, siempre y cuando coincida con la definicin que figura
en el archivo de encabezado. Agregar un subrayado al inicio del nombre es una convencin
comn para dejar claro que las variables son privadas, y tambin para diferenciarlas del
argumento de la funcin (el pin en este caso).
Despus viene el cdigo del programa que estamos convirtiendo en una librera (por fin!). Se
ve ms o menos lo mismo, salvo Morse:: delante de los nombres de las funciones, y en lugar
de _pin pin:
void Morse::punto() {
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::raya() {
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}

Por ltimo, es tpico incluir un comentario en la parte superior del cdigo fuente. Vamos a ver
el cdigo:
/*
Morse.cpp - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
/
include "WProgram.h"
include "Morse.h"
Morse::Morse(int pin) {
pinMode(pin, OUTPUT);
_pin = pin;
}
void Morse::punto() {
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::raya() {
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}

Y eso es todo lo que necesita (hay algunas otras cosas opcionales, pero hablaremos de eso ms
adelante). Vamos a ver cmo usar la librera.

Pgina 6 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

En primer lugar, hay que crear el directorio Morse dentro del subdirectorio de libreras . Copia
o mueve los archivos Morse.h y Morse.cpp a ese directorio. Ahora ejecuta el IDE de Arduino. Si
vas al men Sketch > Import Library deberas ver el una opcin Morse. La librera ser
compilada con los programas que la utilizan. Si no aparece la librera, asegrate de que los
nombres de los archivos terminan realmente ten .cpp y .h (y no en .pde o .txt, por ejemplo).
Vamos a ver cmo podemos modificar nuestro programa de SOS para hacer uso de la nueva
librera:
include <Morse.h>
Morse morse(13);
void setup() { }
void loop() {
morse.punto(); morse.punto(); morse.punto();
morse.raya(); morse.raya(); morse.raya();
morse.punto(); morse.punto(); morse.punto();
delay(3000);
}

Hay algunas diferencias con el programa original (aparte del hecho de que parte del cdigo se
ha trasladado a la librera).
En primer lugar, hemos aadido una declaracin # include al principio del programa. Esto hace
que la librera Morse est disponible para el programa y que se enve a la placa de Arduino.
Cuando ya no necesite una librera en un programa, debe eliminar la sentencia # include para
ahorrar espacio.
En segundo lugar, creamos una instancia de la clase Morse llamada morse:
Morse morse(13);

Cuando esta lnea se ejecute ( esto sucede incluso antes de que se ejecute la funcin setup () ),
se llamar al constructor de la clase Morse, y se le pasar un parmetro (en este caso, el valor
13).
Tenga en cuenta que nuestro setup() est vaco, esto se debe a que la llamada a pinMode () se
produce dentro de la librera (cuando se construye la instancia).

Pgina 7 de 8

DISEO MODULAR Y LIBRERIAS CON ARDUINO

Por ltimo, para llamar a las funciones punto() y raya(), tenemos que precederlas del prefijo
morse (que es el nombre de la instancia que hemos creado). Podramos tener varias instancias
de la clase Morse, cada una con su propio PIN almacenado en la variable privada _pin de esa
instancia. Al llamar a una funcin se indica que instancia de la clase se debe utilizar. Es decir, si
tuviramos:
Morse morse (13); Morse morse2 (12);

la llamada a morse2.punto (), hace que la salida sea por el pin 12.
Si pruebas el nuevo programa, probablemente te dars cuenta de que el IDE de Arduino no
reconoce las funciones de la librera y no resalta el cdigo. Por desgracia, por ahora el software
de Arduino no puede averiguar lo que hay definido en la librera (aunque sera una buena
caracterstica a tener en cuenta), as que tienes que ayudarle un poco. Para ello, crea un
archivo llamado keywords.txt en el directorio de Morse.. Que debe tener este aspecto:
Morse KEYWORD1 raya KEYWORD2 punto KEYWORD2
Cada lnea tiene el nombre de la palabra clave, seguido de un tabulador (no espacios), seguido
por el tipo de palabra clave. Las clases deben ser del tipo KEYWORD1 y se muestran de color
naranja; las funciones deben ser del tipoKEYWORD2 y sern de color marrn. Tendr que
reiniciar el entorno Arduino para conseguir que reconozca las nuevas palabras clave.
Es conveniente acompaar las libreras con algn programa de ejemplo que haga uso las
mismas. Para ello, cree un directorio examples dentro del directorio Morse. A continuacin,
copie el directorio que contiene el programa de ejemplo que escribimos arriba (lo llamaremos
SOS) en el directorio de ejemplos. (Puedes encontrar el programa de ejemplo con la opcin
Sketch > Show Sketch Folder) Si reinicias el entorno Arduino (esta es la ltima vez, lo prometo)
vers la opcin Library-Morse dentro de File > Sketchbook > Examples que contiene su
ejemplo. Es posible que quieras agregar algunos comentarios para explicar mejor cmo usar la
librera.

Pgina 8 de 8

Вам также может понравиться