デバイス用のArduinoライブラリを作成しましたが、そのライブラリは一般的にいくつかの方法で構成できます。たとえば、割り込みを使用するか、ポーリングします。他の例から、ライブラリ用に以下に示すfoo.h、fooConfig.h、およびfoo.cppのファイルを作成しました。ここで、fooConfig.hには、シールドの使用方法の構成が含まれています。割り込みの有無など...
そうすることで、メインスケッチのINOファイルが#defineを使用して宣言されたデフォルト設定を上書きできるようにしたいと思います。ライブラリのインスタンスに含めます。結果はそれが本当にそうすることを示しています。少なくとも私がやっている方法。
以下のコードは、問題のある単純化された例です。
definetest.ino
#define BAR USE_POLL
#include <foo.h>
foo test;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.print(F("setup's defined BAR was "));
Serial.println(BAR);
Serial.print(F("inside foo.begin defined BAR was "));
Serial.println(test.begin());
}
void loop() {
}
foo.h
#ifndef FOO_h
#define FOO_h
#include "FOOConfig.h"
class foo {
public:
int begin();
};
#endif // FOO_h
FooConfig.h
#ifndef FOOCONFIG_h
#define FOOCONFIG_h
#define USE_INT 1
#define USE_POLL 2
#ifndef BAR
//default to using interrupts
#define BAR USE_INT
#endif // BAR
#endif // FOOCONFIG_h
foo.cpp
#include <foo.h>
int foo::begin() {
#if defined(BAR) && BAR == USE_INT
Timer1.attachInterrupt( isr ); // error here, because of the define...
return 1;
#elif defined(BAR) && BAR == USE_POLL
return 2;
#endif
return 0;
}
次のシリアル出力が生成されます。
setup's defined BAR was 2
inside foo.begin defined BAR was 1
foo.begin内のBARを1ではなく2に等しくすることが望まれる場合、プリコンパイラーにattachInterruptを省略するかどうかを決定させることが望ましいことに注意してください。ライブラリが使用されていない場合、ライブラリのリソースの依存性と消費を望まないでください。単に高度なオプションにしたいだけです。
これはmakeファイルまたはeclipseで最も適切に処理できることを理解していますが、現在1.0.3でArduinoIDE用にこのライブラリを公開しようとしています。
どんな助けでも大歓迎です。
参考までに、実際のコード全体はここにあります。 https://github.com/mpflaga/Sparkfun-MP3-Player-Shield-Arduino-Library/tree/master/SFEMP3Shield