No debería llamar a funciones desde archivos de encabezado. Los archivos de encabezado son para definir macros preprocesadores (#define) y referencias a variables / funciones en otros archivos.
Debería crear varios archivos C y vincularlos en tiempo de compilación. El archivo de encabezado se utiliza para indicar a cada archivo C qué funciones y variables tienen los otros archivos C.
Para usar varios archivos en el IDE de Arduino, necesita al menos 1 archivo de encabezado para describir las funciones que están en los otros archivos que desea compartir entre ellos. Además, cualquier variable global que desee utilizar en todos los archivos.
Estas definiciones deben calificarse con el atributo "externo".
Luego debe agregar uno o más archivos "pde" que contienen el código real y las definiciones de variables para las funciones.
Por ejemplo, tengo un archivo "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
y un archivo "mouse.pde":
#include <ps2.h>
PS2 mouse(6,5);
void mouse_read(char *stat,char *x, char *y)
{
mouse.write(0xeb); // give me data!
mouse.read(); // ignore ack
*stat = mouse.read();
*x = mouse.read();
*y = mouse.read();
}
void mouse_init()
{
mouse.write(0xff); // reset
mouse.read(); // ack byte
mouse.read(); // blank */
mouse.read(); // blank */
mouse.write(0xf0); // remote mode
mouse.read(); // ack
delayMicroseconds(100);
}
Luego en mi archivo principal tengo:
#include "mouse.h"
y puedo llamar a las funciones que están en "mouse.pde" como si estuvieran en el archivo local.