Publi

Creando bibliotecas o librerías para Arduino

Aunque en inglés library, es biblioteca (ese lugar donde hay tantos libros y se requiere silencio), y no librería (ese lugar donde se venden libros), a la RAE le da igual, y no quiero entrar mucho en eso…
Una de las ventajas de los lenguajes modernos es que no tenemos que escribir todo el código junto, incluso muchas partes de código no son nuestras; existen bibliotecas con funcionalidades que podemos llamar desde nuestros programas, y de hecho si queremos programar bien, uno de nuestros deberes es la reutilización de código, para lo cual, nosotros podemos crear nuestras propias bibliotecas y utilizarlas en nuestros programas… o compartirlas con otros desarrolladores.

Contaré todo esto de dos formas: para en el entorno Arduino y para hacerlo sin él.

En principio, vamos a hacer un pequeño programa en el que hagamos parpadear un led, aunque para ello, crearemos una clase llamada Parpadeo que nos permita configurar el led y el retardo. Esta clase estará en los archivos parpadeo.h y parpadeo.cpp ; a continuación pongo el código fuente de parpadeo.h, parpadeo.cpp y blinky.pde (el programa principal).

parpadeo.h:

1
2
3
4
5
6
7
8
9
10
11
12
#include <WProgram.h>

class Parpadeo
{
public:
~Parpadeo();
Parpadeo(int ledpin, int retardo);
void blink();
private:
int ledpin;
int retardo;
};

parpadeo.cpp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "parpadeo.h"

Parpadeo::~Parpadeo()
{
}

Parpadeo::Parpadeo(int ledpin, int retardo): ledpin(ledpin), retardo(retardo)
{
pinMode(ledpin, OUTPUT);
}

void Parpadeo::blink()
{
digitalWrite(ledpin, HIGH);
delay(retardo);
digitalWrite(ledpin, LOW);
delay(retardo);
}

blinky.pde:

1
2
3
4
5
6
7
8
9
10
11
12
#include

Parpadeo p(10, 500);

void setup()
{
}

void loop()
{
p.blink();
}

Aunque, cómo debemos colocar estos archivos?

Con el IDE Arduino

SketchbookTenemos que mirar dónde tenemos nuestro sketchbook (File / Preferences), dentro de ese directorio, creamos otro llamado libraries (si no lo tenemos ya), y dentro de éste creamos parpadeo (el nombre de nuestra biblioteca). Ya podremos compilar libremente utilizando #include , e incluso si hacemos clic en Sketch / Import Library encontraremos parpadeo, para poder insertarla fácilmente en nuestros proyectos.

Con el script para scons

Lo bueno es este método es que podemos insertar nuestras bibliotecas donde queramos, por ejemplo para utilizar las incluidas dentro de sketchbook, podemos hacer lo siguiente:

$ scons EXTRA_LIB=/home/gaspy/sketchbook/libraries

La estructura debe ser siempre la misma:
[directorio de libraries] / [nombre de la biblioteca] / [nombre de la biblioteca.h] (y demás archivos)

Por lo tanto para compilar con el script de scons debemos incluir EXTRA_LIB=[directorio de libreries] y este directorio de libraries puede estar en cualquier lado, puede ser una ruta relativa o absoluta, puede llamarse de cualquier forma, por ejemplo, el mío se llama libs.

Si no queremos escribir mucho, y vamos a construir muchas veces desde línea de comandos podemos hacer lo siguiente:

$ LIBS=”EXTRA_LIB=[directorio de libraries]”
$ scons $LIBS

También podría interesarte...

There are 7 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Pingback: Poesía binaria » Memoria dinámica con Arduino en C++ /

  3. David /
    Usando Google Chrome Google Chrome 33.0.1750.146 en Windows Windows 7

    Hola, estoy aprendiendo sobre las librerias en arduino, tu ejemplo me salio al dedillo, el problema es, que quiero pasarle el parametro solo del led que voy a utilizar, y despues en on y off el tiempo que estara encendido o apagado, el problema es que puse un segundo, y no se apaga, te agradeceria mucho que me ayudaras un poquito con el codigo que te paso a continuacion. Gracias.

    #include

    class LED1
    {
    public:
    ~LED1();
    LED1(int ledpin);
    void on(int tiempo);
    void off(int tiempo);
    private:
    int ledpin;
    int tiempo;
    };

    #include “led1.h”

    LED1::~LED1()
    {
    }

    LED1::LED1(int ledpin): ledpin(ledpin)
    {
    pinMode(ledpin, OUTPUT);
    }

    void LED1::on(int tiempo)
    {
    digitalWrite(ledpin, HIGH);
    delay(tiempo);
    digitalWrite(ledpin, LOW);
    }

    void LED1::off(int tiempo)
    {
    digitalWrite(ledpin, LOW);
    delay(tiempo);
    digitalWrite(ledpin, HIGH);
    }

    #include “led1.h”

    LED1 led1(13);

    void setup()
    {
    }

    void loop()
    {
    led1.on(1000);
    }

  4. David /
    Usando Google Chrome Google Chrome 33.0.1750.146 en Windows Windows 7

    Ok ya lo he solucionado. 🙂

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 27.0 en Ubuntu Linux Ubuntu Linux

      Hola David!!

      Gracias por tu comentario y perdona la tardanza, podías contar cómo lo has solucionado, por favor ¿? 🙂 Estaría muy bien para los futuros visitantes que lean tu comentario.

  5. Byakuya /
    Usando Mozilla Firefox Mozilla Firefox 44.0 en Windows Windows NT

    Hola amigos desde hace tiempo eh querido realizar una libreria para un sensor de humedad, pero no me es funcional alguna idea? tengo un problema en una funcion que retorna un valor de tipo float, quien puede ayudar. y subo el codigo de mi libreria.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 44.0 en Ubuntu Linux Ubuntu Linux

      Prueba subirlo a pastebin o alguno parecido a ver si alguien se anima 🙂

Leave a Reply