No deberías llamar a funciones desde los archivos de cabecera. Los archivos de encabezado son para definir macros de preprocesador (#define) y referencias a variables / funciones en otros archivos.
Debería crear varios archivos C y vincularlos entre sí 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 contengan 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.