Saludos, humano. Al habla Transductor. Si estás aquí es que quieres aprender a crear tus propias librerías para Arduino. En esté tutorial explicaré cómo escribir una librería simple con una función para encender y apagar un LED.
Para este tutorial es aconsejable entender cómo funcionan las clases en C++.
¿Qué es una librería y por qué la necesito?
Buena pregunta, lector. Una librería es un conjunto de funciones prefabricadas que pueden importarse en el código en que estás trabajando. Imagina que necesitas controlar motores: en vez de escribir tu código desde cero, puedes incluir una librería que contiene funciones para mover un motor.
Las librerías ahorran trabajo (especialmente si están escritas por terceros, aunque te recomiendo que escribas tu propio código siempre que sea posible), pero también simplifican el programa. ¿Por qué? Las definiciones de cada función ocupan espacio en el código principal, y lo hacen díficil de leer. Por tanto es una buena práctica separar el código en varios archivos.
Estructura de una librería para Arduino
Las librerías para Arduino se escriben en C++, y de hecho son clases. ¿No tienes muy claro lo que son las clases? Una clase es como un struct que además de contener variables, puede tener también funciones propias. Para una explicación más detallada visita este enlace.
Habrá que crear dos archivos: uno acabado en ‘.h’ , que contendrá las cabeceras de la clase, y otro acabado en ‘.cpp’ que contendrá todas las definiciones y el código completo de las funciones.
Crea un nuevo directorio con el nombre de la librería (ej. robologs_lib) y dentro crea dos ficheros: robologs.h y robologs.cpp
El fichero robologs.h creará una clase llamada ‘robologs’ que contendrá dos funciones: el constructor de la clase y una función blinking que apagará y encenderá un led en intervalos regulares de tiempo.
//Tutorial de librerias personalizadas con Arduino // //Escrita por Transductor //www.robologs.net //Primero los include guards #ifndef ROBOLOGS_H #define ROBOLOGS_H //Cambia Arduino.h por Wprogram.h si usas una version antigua de la IDE. #include <Arduino.h> //Permite utilizar los comandos de Arduino class robologs //Definicion de la clase { public: //Constructor de la clase robologs(); //Funcion blinking: enciende el led 'pin', espera 'time' segundos y lo apaga void blinking(int pin, int time); private: //Nada que declarar }; #endif
El fichero robologs.cpp contiene el código de las funciones. El constructor está vacío (no tiene que hacer nada en especial a parte de crear objetos). Por contra, la función blinking encenderá y apagará un pin digital en intervalos de tiempo que recibirá como parámetro.
#include "robologs.h" robologs::robologs(){} //Constructor: no tiene que hacer nada en especial void robologs::blinking(int pin, int time) { //Recibe un pin y un tiempo como parametros //Enciende y apaga el pin según el tiempo //Establecer pin como salida pinMode(pin, OUTPUT); //Encenderlo y apagarlo digitalWrite(pin,HIGH); delay(time); digitalWrite(pin, LOW); delay(time); }
Testeando…
Por último queda probar la librería, y para ello debes importarla. Si tienes una versión nueva de la IDE abre Arduino -> Sketch -> Import Libraries -> Add Library y selecciona el directorio que has creado. Si tienes una versión antigua tendrás que instalar la librería a mano (si estás en Linux puedes leer este tutorial).
He aquí un código de ejemplo.
#include <robologs.h> robologs robby; void setup() {} void loop() { robby.blinking(13, 1500); }
Si lo compilas y lo cargas, verás que el LED D13 se enciende y se apaga. Bien hecho, humano. Ahora puedes ir a por un café, un donut o lo que sea que comáis los humanos para celebrarlo.
Final de línea.
De todos los tutoriales que he visto, este es el mas claro para comenzar a comprender como se hacen liblerias para Arduino. Es mas claro que el tipico ejemplo de morse.
Mil gracias.
Gracias Capo, excelente explicación.
Muchas Gracias, he visto varios tutos asi, pero con el tuyo me ha quedado mas que claro, me gustaria que realizaras otro ejemplo un poco mas complejo, muchas gracias por compartir, saludos
hola transductor encontre esta paguina que informa el uso de class en c++ y el ::
dis.unal.edu.co/~fgonza/courses/2003/poo/c++.htm
para los que no han estudiado mucho en c++ como yo ho somos unos vagos en buscar.
interesante publicacion
Excelente artículo. Muchas gracias por tomarte el tiempo en compartirlo.
Muchas gracias! los he probado y ha funcionado perfecto !
¡Genial!