Você não deve chamar funções de dentro dos arquivos de cabeçalho. Os arquivos de cabeçalho são para definir macros do pré-processador (#define) e referências a variáveis / funções em outros arquivos.
Você deve criar vários arquivos C e vinculá-los juntos em tempo de compilação. O arquivo de cabeçalho é usado para informar a cada arquivo C quais funções e variáveis os outros arquivos C possuem.
Para usar vários arquivos no Arduino IDE, você precisa de pelo menos 1 arquivo de cabeçalho para descrever as funções que estão nos outros arquivos que você deseja compartilhar entre eles. Além disso, quaisquer variáveis globais que você deseja usar em todos os arquivos.
Essas definições devem ser qualificadas com o atributo "externo".
Então você precisa adicionar um ou mais arquivos "pde" que contenham o código real e as definições de variáveis para as funções.
Por exemplo, eu tenho um arquivo "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
e um arquivo "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);
}
Então, no meu arquivo principal, tenho:
#include "mouse.h"
e posso chamar as funções que estão no "mouse.pde" como se estivessem no arquivo local.