Ви не повинні викликати функції з файлів заголовків. Файли заголовків призначені для визначення макросів попереднього процесора (#define) та посилань на змінні / функції інших файлів.
Вам слід створювати декілька файлів C і з'єднувати їх між собою під час компіляції. Файл заголовка використовується для того, щоб повідомити кожному файлу C, які функції та змінні мають інші файли C.
Для використання декількох файлів в Arduino IDE вам потрібно щонайменше 1 файл заголовка для опису функцій, які є в інших файлах, якими ви хочете поділитися між ними. Також будь-які глобальні змінні, які ви хочете використовувати в усіх файлах.
Ці визначення слід кваліфікувати за допомогою "зовнішнього" атрибута.
Тоді вам потрібно додати один або кілька файлів "pde", який містить фактичний код та визначення змінних для функцій.
Наприклад, у мене є файл "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
і файл "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);
}
Тоді в головному файлі я маю:
#include "mouse.h"
і я можу викликати функції, що знаходяться в "mouse.pde" так, ніби вони були у локальному файлі.