回答:
ヘッダーファイル内から関数を呼び出すことはできません。ヘッダーファイルは、プリプロセッサマクロ(#define)と他のファイルの変数/関数への参照を定義するためのものです。
複数のCファイルを作成し、コンパイル時にそれらをリンクする必要があります。ヘッダーファイルは、各Cファイルに他のCファイルが持つ関数と変数を通知するために使用されます。
Arduino IDEで複数のファイルを使用するには、それらの間で共有する他のファイルにある関数を記述するために、少なくとも1つのヘッダーファイルが必要です。また、すべてのファイルで使用するグローバル変数。
これらの定義は、「外部」属性で修飾する必要があります。
次に、実際のコードと関数の変数定義を含む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"にある関数を、ローカルファイルにあるかのように呼び出すことができます。
@Majenkoの非常に良い答えの代わりに、C ++クラスを作成して関数をカプセル化し、http: //www.arduino.cc/en/Hacking/LibraryTutorialで説明されているようにライブラリーフォルダーに配置することもできます。
#include <Serial.h>
Serialメソッドを呼び出せるようにするには、クラスの実装ファイルで必要になる場合があります。シリアル関数の呼び出しには明らかに副作用があるので(特に読んで)、私はこの考え方を慎重に実行します。シリアルインターフェイスと直接やり取りするのではなく、char *を受け取り、シリアルインターフェイスのバイトをメインプログラムからそれに渡すメソッドをクラスに定義することを好みます。
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
Serial
ヘッダーファイル/タブでクラス/オブジェクトを宣言する方法を見つけました:
#include <WProgram.h> // at the top of the file
これは私にはとてもきれいに感じませんが、まだ欠点はないようです。