Non si dovrebbero chiamare funzioni dall'interno dei file di intestazione. I file di intestazione servono per definire macro pre-processore (#define) e riferimenti a variabili / funzioni in altri file.
Dovresti creare più file C e collegarli insieme in fase di compilazione. Il file di intestazione viene utilizzato per indicare a ciascun file C quali funzioni e variabili hanno gli altri file C.
Per utilizzare più file nell'IDE di Arduino è necessario almeno 1 file di intestazione per descrivere le funzioni presenti negli altri file che si desidera condividere tra loro. Inoltre, tutte le variabili globali che si desidera utilizzare in tutti i file.
Queste definizioni devono essere qualificate con l'attributo "esterno".
Quindi è necessario aggiungere uno o più file "pde" che contiene il codice effettivo e le definizioni delle variabili per le funzioni.
Ad esempio, ho un file "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
e un file "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);
}
Quindi nel mio file principale ho:
#include "mouse.h"
e posso chiamare le funzioni che si trovano in "mouse.pde" come se fossero nel file locale.