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 23 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 🙂

  6. mark /
    Usando Google Chrome Google Chrome 104.0.5112.81 en Windows Windows NT

    Great blog !! You should start many more. I love all the info provided. I will stay tuned.
    Outdoor Kitchens near me

  7. shirley foley /
    Usando Google Chrome Google Chrome 104.0.0.0 en Windows Windows NT

    General people should get the gist, the purpose/meaning instantly.
    https://www.perth-concreting.com.au/

  8. Mozelle J. Davis /
    Usando Google Chrome Google Chrome 104.0.0.0 en Windows Windows NT

    If you really have any desire to recall the stunning season of arcade gaming, then, the Pandora Box 4S is the best answer for you. It goes with every one of the admirable games that you survey, and is not difficult to set up and utilize. Check for more pandora arcade box game list

  9. gary maxwell /
    Usando Google Chrome Google Chrome 105.0.0.0 en Windows Windows NT

    it’s incredibly uplifting to see me finally being able to understand all the fundamentals mentioned in the post. cleaners near me

  10. marty lyons /
    Usando Google Chrome Google Chrome 105.0.0.0 en Windows Windows NT

    I could follow perfectly what you were doing. ducted heating service

  11. jan cox /
    Usando Google Chrome Google Chrome 105.0.0.0 en Windows Windows NT

    General people should get the gist, the purpose/meaning instantly.
    https://www.landscapers-brisbane.com.au/

  12. james /
    Usando Google Chrome Google Chrome 105.0.0.0 en Windows Windows NT

    A wedding is an end where two people are participated in marriage. Wedding customs and customs change absolutely between satisfying proposing, ethnic get-togethers, religions, countries, and social classes. Most wedding limits join an exchange of marriage guarantees by a couple, show of a gift (offering, rings, head thing, sprouts, money, dress), and a public assertion of marriage by an effect figure or celebrant. check this out
    https://zenwriting.net/audiandkes/choosing-a-web-site-on-your-wedding-reception-is-certain-from-the-set-budget

  13. doris chappell /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    what everybody would like to know as the title has suggested is using. coloured concrete driveway

  14. ronald godfrey /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    You inspired me to start coding thanks a lot. skirting boards perth

  15. pennie badger /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    I’ve been looking for someone or something like this to teach me parpadeo programming from literally scratch.

  16. james red /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    I’m starting a parpadeo programming class in school which is something I’ve been really wanting to do. https://www.bankstownroofing.com.au/

  17. mary brown /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    I really appreciate that you took the time and explain this.
    https://www.kitchenrenovations-adelaide.com.au/

  18. jessica alexander /
    Usando Google Chrome Google Chrome 107.0.0.0 en Windows Windows NT

    This always looks so simple till you have to do it yourself. wooden window frame repairs

  19. builder16 /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    Thanks for sharing this wonderful post!
    Plastic Surgery Calgary

  20. Anonymous /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    Nice blog. Keep up the good work.
    Calgary Accountants

  21. builder16 /
    Usando Google Chrome Google Chrome 106.0.0.0 en Windows Windows NT

    «Great post! Thanks for sharing this awesome article.
    Fencing Baton Rouge
    ‘»

Leave a Reply