Librerías.

Una librería, para el programador es un complemento en forma de script del lenguaje que sirve para dar funcionalidad específica a nuestra aplicación. En ARDUINO UNO, por ejemplo usamos una librería llamada <serial> para dar formato a las salida por pantalla de los datos de nuestra aplicación.

Arduino tiene una serie de librerías estándar preinstaladas, las llamadas librerías estándar que vienen en el gestor de librerías del propio Arduino IDE. Son autoactualizable y algunas se descargan automaticamente cuando se ejecuta el propio GESTOR.

gestor de descargas

Pero existen otra serie de librerías no oficiales y que se encarga la comunidad de Arduino de crear y subir de manera gratuita y altruista. Otros tipos de librería las realizan los fabricantes de sensores específicos para que se puedan conectara nuestra placa Arduino y realizar la función específica.

Añadir librería.

Para utilizar una librería estándar de Arduino UNO, solo tenemos que ir al menu Programa y en el desplegable que se muestra Incluir librería. Se mostrarán una serie de librerías básicas y un historial de librerías usadas.

Librerías estándar

Al seleccionar una librería del menú de librería, se agregará al proyecto la librería seleccionada mediante los simbolos < y >. Observa que la librería escogida tiene formato .h. Y además, la librería se invoca dentro del proyecto con el método #include.

palabra clave include

El formato .h del archivo librería procede de los archivos preprocesados del lenguaje C que ha adaptado JAVA a la hora de compilar proyectos y librerías; por lo tanto la extensión es un archivo header que el preporcesador de JAVA incluye en el proyecto para ayudar de funcionalidad al mismo.

También existen librerías no oficiales, es decir, no estándar. Estas librerías las puedes descargar desde Internet buscando desde Google o tu buscador preferido utilizándo como palabra clave el sensor que buscar y el condicional (+) arduino y librería:

busqueda por google de librerias no estándar

Siempre existirán foros, páginas u enlaces donde podrás descargar las librerías no estándar que busques. En la imagen puedes ver el resultado de busqueda de la librería del acelerómetro MMA7361. Esta librería no es estándar de Arduino, ya que la versión estándar es una versión global que puedes utilizar para tu módulo MMA7361, aunque no es la recomendable. Por eso, muchas veces tienes que recurrir a foros externos Arduino para poder localizar tu propia librería para poder usarla en dicho sensor.

Crea tu propia librería

Las librerías de los desarrolladores oficiales ahorran un montón de código cuando las utilizas para gobernar, controlar o manejar controles de Arduino. Pero a veces necesitas una librería para lo que no hay control, o puede que un servo (por el hecho de ser muy viejo o muy moderno) no disponga de librería estándar o recomendada para su control. Y eso se soluciona, creándo tu propia librería.

¿Te acuerdas donde se guardan las librería por defecto en Arduino?

Por defecto en Mis Documentos/Arduino/Libraries es la carpeta de descarga de librerías y que guardas en tu ordenador.

directorio de libreries

Crear una librería puede resultar un proceso un tanto complicado ya que el IDE de Arduino no te ofrece las herramientas necesarias para generar el archivo header como el archivo .cpp. Tendríamos que instalar Eclipse o NetBeans para desarollar dichas librerías que utilizarías en tu proyecto. Aunque también podrías crear librerías básicas con tu editor de java BlueJ.

Editor BlueJ

Por cierto, El Ide de Arduino UNO y Processing está basado en el IDE de BlueJ. Por eso Arduino está construido en Java y gobernado por C++.

Pero también podemos usar un editor de texto plano para crear los archivos de librería necesarios. Vamos a ello.

Para una librería funcional se necesitan dos archivos. Uno cabecera .h y otro de c++ .cpp. Además la librería tiene que partir de un código. Así que supón el siguiente código:

librería morse

La librería se llamará morse y generaremos un fichero de cabecera llamado morse.h.

En el código hay dos funciones dot(); y dash();, que proporcionan un tiempo de activación de un pin.

Abre el notepad:
Vamos a empezar a crear el header de la librería. escribe el siguiente código:

codigo de la cabecera

Una clase es una colección de métodos y propiedades que se guardan todas juntas en un solo lugar. Las funciones pueden ser públicas (public), es decir, pueden llamarse por quien usa la librería o privadas (private), es decir, que solo pueden llamarse desde dentro de la propia clase. Todas las clases tienen una función llamada constructor, que es usada para crear una instancia de la clase. El constructor tiene el mismo nombre que la clase y no tiene tipo de variable de devolución.

En el fichero de cabecera de una librería es necesario la declaración #include que de acceso a los tipos y constantes estándar del lenguaje de Arduino (esto se añade automáticamente en los sketches pero no a las librerías). Esta declaración debe ponerse antes de la definición de la clase. La declaración debe ser:

declaración de la cabecera

Además es común poner los ficheros de cabeceras entre estas funciones:

fichero de cabecera

Ya podemos ver el archivo de cabecera terminado teniendo la siguiente forma:

codigo cabecera terminado

Guardalo como Morse.h teniendo en cuenta que a la hora de guardar en Notepad, debes de escoger Todos los archivos y dentro de una nueva carpeta creada en la carpeta libreries del directorio de Arduino.

Guarda el archivo

El archivo .cpp lo puedes ver a continuación ya editado:

código del cpp

El código Morse:: antes del nombre de la función indica que la función es parte de la clase Morse. Esto se ve en todas las funciones de la clase. La variable llamada _pin es una variable privada tal y como se ha definido en el fichero de cabecera y se pone el simbolo _ delante por convención para indicar que es privada y para diferenciarlo del argumento de la función, pero puede llamarse de cualquier forma mientras coincida con la definición en el fichero de cabecera.

Sobre la directiva #include tengo que indicar que existe en dos versiones. En una se pone el nombre de fichero entre comillas, en la otra entre paréntesis angulares (el signo menor y mayor).

#include "fichero_con_comillas.h"
#include <fichero_entre_menor_y_mayor.h>

La versión con los paréntesis angulares busca los ficheros en todos los directorios que se han especificado en la llamada al compilador – normalmente con la opción "-I". Estos directorios se suelen rastrear por el fichero incluido en el orden en que aparecen en la línea de comando. Cuando se incluye un fichero entre comillas, entonces el compilador busca este fichero primero en el mismo directorio que el fichero actualmente compilado y después en los demás directorios. Es decir, la versión con comillas se diferencia de la versión con paréntesis angulares únicamente por buscar primero en el directorio del fichero compilado. Tras no encontrarlo ahí actúa igual.

Bueno guarda el fichero .cpp como Morse.cpp en el mismo directorio del anterior archivo.

archivo .cpp

Y ya tienes los dos archivos necesarios para usarlo en tu .ino.

Probando y comparándo

Hemos creado la librería para producir tres puntos seguidos, después tres rayas seguidas y que se repitan tres puntos seguidos y una pausa, o lo que es lo mismo hemos hecho el .ino de SOS señal de socorro en morse visual.

Si has guardado el .ino original como morse.ino y lo subes a tu placa, podrás ver como se ilumina el led y se apaga respondiendo a los tiempos de programación.

Ahora vamos a utilizar las librerías creadas. Para ello, reinicia tu IDE de Arduino y ve a la opción Programa, Incluir librería y verás que en la opción de Contribuited Libreries, se ha añadido la librería Morse.

librería agregada

Abre el archivo morse.ino anterior y modifícalo según lo ves a continuación:

incluir librería en ino

Cuando guardas y vuelves a subir verás que el led realiza la misma función que el .ino original pero con una reducción considerable de código fuente utilizado en el scketch.

A lo largo de éste curso iremos creándo más librerías y aprenderás a manejarlas correctamente con la experiencia.