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 del IDE de Arduino UNO Rev3.
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.

Añadir librería a tu proyecto Arduino UNO.
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.

Incluir una librería en Arduino UNO Rev3.
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 o utilizándo como palabra clave el sensor que buscar y el condicional (+) arduino y librería:

Descargar librería de sensor específico en Internet.
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 descarga de librerías en Arduino UNO Rev3.
El directorio de descargas de librería en Arduino UNO Q es el propio directorio del proyecto, directamente desde Arduino APP Lab, en el Library Manager (gestor de librerías). En Arduino UNO Q, los archivos y recursos de tus aplicaciones (Apps) residen directamente en la propia memoria eMMC de la placa (dentro de la partición de Linux). Y por defecto la ruta de descargas está en:
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 o cualquier otro entorno de desarrollo para crear dichas librerías que utilizarías en tu proyecto. 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:
int pin = 13;
void setup() {
pinMode(pin, OUTPUT);
}
void loop() {
dot(); dot(); dot();
dash(); dash(); dash();
dot(); dot(); dot();
delay(3000);
}
void dot() {
digitalWrite(pin, HIGH);
delay(250);
digitalWrite(pin, LOW);
delay(250);
}
void dash() {
digitalWrite(pin, HIGH);
delay(1000);
digitalWrite(pin, LOW);
delay(250);
}
Arduino UNO
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:
class Morse
{
public:
Morse(int pin); //constructor
void dot();
void dash();
private:
int _pin;
};
Arduino C++
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:
#include "Arduino.h" //Versión IDE 1.x:
#include "WProgram.h" //Versión IDE 0.x:
Arduino C++
Además es común poner los ficheros de cabeceras entre estas funciones:
#ifndef Morse_h
#define Morse_h
// the #include statment and code go here...
#endif
Arduino C++
Ya podemos ver el archivo de cabecera terminado teniendo el siguiente código completo:
/*
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 "Arduino.h"
class Morse
{
public:
Morse(int pin);
void dot();
void dash();
private:
int _pin;
};
#endif
Arduino C++
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 librería dentro del directorio de Arduino UNO Rev3.
El archivo .cpp lo puedes ver a continuación ya editado:
/*
Morse.cpp - Library for flashing Morse code.
Created by David A. Mellis, November 2, 2007.
Released into the public domain.
*/
#include "Arduino.h"
#include "Morse.h"
Morse::Morse(int pin)
{
pinMode(pin, OUTPUT);
_pin = pin;
}
void Morse::dot()
{
digitalWrite(_pin, HIGH);
delay(250);
digitalWrite(_pin, LOW);
delay(250);
}
void Morse::dash()
{
digitalWrite(_pin, HIGH);
delay(1000);
digitalWrite(_pin, LOW);
delay(250);
}
Arduino C++
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.

Guarda el archivo librería dentro del directorio de Arduino UNO Rev3.
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.

Añadir librería creada al proyecto Arduino UNO Rev3.
Abre el archivo morse.ino anterior y modifícalo según lo ves a continuación:
// Incluir librería creada.
include <Morse.h>
Morse Morse (13);
void setup(){
}
void loop(){
Morse.dot(); Moser.dot(); Morse.dot();
Morse.dash(); Moser.dash(); Morse.dash();
Morse.dot(); Moser.dot(); Morse.dot();
delay(3000);
}
Arduino UNO
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.