Bạn không nên gọi các chức năng từ trong tệp tiêu đề. Các tệp tiêu đề là để xác định các macro tiền xử lý (#define) và tham chiếu đến các biến / hàm trong các tệp khác.
Bạn nên tạo nhiều tệp C và liên kết chúng với nhau tại thời điểm biên dịch. Tệp tiêu đề được sử dụng để báo cho mỗi tệp C những chức năng và biến số mà các tệp C khác có.
Để sử dụng nhiều tệp trong Arduino IDE, bạn cần ít nhất 1 tệp tiêu đề để mô tả các chức năng có trong các tệp khác mà bạn muốn chia sẻ giữa chúng. Ngoài ra, bất kỳ biến toàn cục nào bạn muốn sử dụng trên tất cả các tệp.
Các định nghĩa này phải đủ điều kiện với thuộc tính "bên ngoài".
Sau đó, bạn cần thêm một hoặc nhiều tệp "pde" chứa mã thực tế và định nghĩa biến cho các hàm.
Chẳng hạn, tôi có tệp "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
và tệp "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);
}
Sau đó, trong tập tin chính của tôi, tôi có:
#include "mouse.h"
và tôi có thể gọi các hàm trong "mouse.pde" như thể chúng nằm trong tệp cục bộ.