Anda seharusnya tidak memanggil fungsi dari dalam file header. File header adalah untuk mendefinisikan makro pra-prosesor (#define) dan referensi ke variabel / fungsi di file lain.
Anda harus membuat beberapa file C dan menautkannya bersamaan pada waktu kompilasi. File header digunakan untuk memberi tahu setiap file C apa fungsi dan variabel yang dimiliki file C lainnya.
Untuk menggunakan banyak file di Arduino IDE, Anda memerlukan setidaknya 1 file header untuk menjelaskan fungsi-fungsi yang ada di file lain yang ingin Anda bagikan di antaranya. Juga, variabel global apa pun yang ingin Anda gunakan di semua file.
Definisi-definisi ini harus memenuhi syarat dengan atribut "eksternal".
Maka Anda perlu menambahkan satu atau lebih file "pde" yang berisi kode aktual dan definisi variabel untuk fungsi.
Misalnya, saya punya file "mouse.h":
extern void mouse_read(char *,char *, char *);
extern void mouse_init();
dan 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);
}
Kemudian di file utama saya, saya punya:
#include "mouse.h"
dan saya dapat memanggil fungsi-fungsi yang ada di "mouse.pde" seolah-olah mereka berada di file lokal.
Sebagai alternatif untuk jawaban yang sangat bagus dari @ Majenko, Anda bisa membuat kelas C ++ untuk merangkum fungsi Anda dan meletakkannya di folder perpustakaan seperti yang dijelaskan dalam http://www.arduino.cc/en/Hacking/LibraryTutorial .
Anda mungkin perlu
#include <Serial.h>
di file implementasi kelas Anda untuk dapat memanggil metode Serial. Saya akan berhati-hati melakukan hal ini karena ada efek samping yang jelas untuk memanggil fungsi Serial (baca khususnya). Saya lebih suka mendefinisikan metode di kelas saya yang mengambil char * dan mengirimkan byte dari antarmuka serial ke dalamnya dari program utama saya, daripada memiliki itu berinteraksi dengan antarmuka serial secara langsung.sumber
Saya menemukan cara agar
Serial
kelas / objek dideklarasikan di file header / tab:Ini tidak terasa sangat bersih bagi saya, tetapi tampaknya belum memiliki kekurangan.
sumber