Hola.
A ver si puedo aportar algo.
Vaya por delante que hacer una librería es un proceso "peculiar" y la ayuda de arduino es mas bien parca.
Lo primero que hay que hacer son dos archivos: cabecera (.h) y funciones (.cpp). Y aquí viene la primera tontería: tiene que llamarse cpp aunque dentro tengas todo escrito en C.
El archivo de cabecera es un indicador para el compilador; le dice que funciones va a compilar, que forma tienen estas, que variables usan, etc... Aumenta la velocidad de compilación. Hoy en día con estas pedazo de máquinas que tenemos no importa demasiado, pero con máquinas lentas o programa muy grandes si que importa.
El otro archivo es un programa en C donde están tus funciones.
Va un ejemplo:
comunes.h
Código:
///________________________________________________________________________________________________
// Vidal 2016
// www.naparlinex.com
// funciones comunes a todos los programas (scketches)
// cabeceras
#ifndef COMUNES_H_
#define COMUNES_H_
#include <Arduino.h>
// Para la recepción de datos vía serie
boolean split_cadena(String cadena,String array[],int items,char separador,boolean csum_sn);
#endif // COMUNES_H_
Ahora el comunes.cpp
Código:
//________________________________________________________________________________________________
// Vidal 2016
// www.naparlinex.com
// funciones comunes a todos los programas (scketches)
#include "comunes.h"
//------------------------------------------------------------------------
// comprueba que los datos de la cadena sean correctos (check_sum al final)
// y si lo son los mete en el array que tendrá tantos items
//------------------------------------------------------------------------
boolean split_cadena(String cadena,String array[],int items,char separador,boolean csum_sn)
{
boolean devuelve = false;
int a,item,inicio_csum,c_sum;
String subcadena = "";
item = 0;
c_sum = 0;
inicio_csum = 0;
for(a=0;a < (int)cadena.length();a++)
{
if(item < items) c_sum += cadena.charAt(a);
if(cadena.charAt(a) == separador)
{
if(item <= items)
{
array[item++] = subcadena;
subcadena = "";
}
if(item == items) inicio_csum = a;
}
else subcadena.concat(cadena.charAt(a));
}
if(csum_sn)
{
subcadena = cadena.substring(inicio_csum+1,cadena.length()-1);
if(subcadena.toInt() == c_sum) devuelve = true;
}
else {
array[item++] = subcadena;
devuelve = true;
}
return devuelve;
}
Fíjate que en el comunes.cpp hay un include "comunes.h y MUY importante en el comunes.h hay un include "Arduino.h", este tiene las referencia que necesita el compilador de arduino para compilar tu librería.
Ya tienes creada una librería, ahora hay que copiarla al directorio donde arduino almacena las librerías. en el ejemplo, haces una carpeta que se llame "comunes", le metes dentro el comunes.h y el comunes.cpp y copias la carpeta a /usr/share/arduino/libraries/ (en win no sé donde va, pero será algo parecido).
Ojo a los permisos si estás en linux, esto lo tiene que hacer como su.
Ahora te tiene que aparecer una librería llamada comunes en el IDE de arduino.
No he podido probar esta librería en concreto por que la parte hardware de mi proyecto está ahora mismo repartida en piezas entorno al soldador, pero esto se compila sin problemas, así que imagino que no tendrás problemas para hacer algo así en tu proyecto.
Una última cuestión, yo no uso el IDE y compilo desde la linea de comandos, y así funciona. si tienes problemas con el IDE, intentaré ayudar con ellos.
Espero que todo este tochazo ayude a clarificar el tema.
Suerte!!!
P.D. Un ultimo apunte que no he probado; parece que si dentro de la carpeta donde tienes el scketch creas una carpeta libraries y le metes ahi esta libreria en vez de en /usr/share... te debe funcionar, pero lo leí hace tiempo y no me ha funcionado nunca.