特定のハードウェアチップと対話するためのAPIを提供するいくつかのライブラリを使用しています(これらのドライバーを作成しますか?)。ただし、カスタムボードやシールドが異なると、チップが異なるピンにマッピングされ、ライブラリをケースごとに変更する必要があります。ライブラリを変更する必要がある場合、Arduino IDEライブラリマネージャーではうまく機能しません。
ライブラリ自体を毎回変更する必要がないように、この構成を公開するための推奨/推奨パターンはありますか?
特定のハードウェアチップと対話するためのAPIを提供するいくつかのライブラリを使用しています(これらのドライバーを作成しますか?)。ただし、カスタムボードやシールドが異なると、チップが異なるピンにマッピングされ、ライブラリをケースごとに変更する必要があります。ライブラリを変更する必要がある場合、Arduino IDEライブラリマネージャーではうまく機能しません。
ライブラリ自体を毎回変更する必要がないように、この構成を公開するための推奨/推奨パターンはありますか?
回答:
私が使用する方法は、ピンをパラメーターとしてコンストラクターに提供することです。これらのピン番号は、後で.begin()
関数や他の場所で使用するために変数に格納されます。
ほとんどの場合、初期化リストを使用して物事を単純にしています。例えば:
class Something {
uint8_t _cs;
uint8_t _dc;
Something(uint8_t cs, uint8_t dc) : _cs(cs), _dc(dc) {}
void begin();
};
void Something::begin() {
pinMode(_cs, OUTPUT);
pinMode(_dc, OUTPUT);
}
Something mySomething(10, 8);
次の2つの可能性のいずれかを使用します。
(クラス)変数を使用し、コンストラクター内で設定します。
利点:
別の(例:Init)メソッドを使用します。
利点:
備考
ピン設定では、ほとんどの場合静的回路が使用されるため、最初のアプローチがおそらくより良いでしょう。
設定については、主に2番目の方法の方が適しています。
多くのピンが含まれている場合(そうではない)、構造または別のピン設定クラスを使用します。
マクロ
私がアドバイスしないのはマクロです。ユーザーが自分でソースコードを変更する必要があり、新しいバージョンがインストールされている場合、変更を再度マージまたはやり直す必要があります。利点は、(マシン)コードが少し少なく、おそらく少し高速で、メモリ使用量が少し少ないですが、3つの側面はすべて最小限です。
Arduinoでは一般的に過剰なC ++コンストラクターのようなものを避けたい場合は、#define
's(オブジェクトのようなマクロ)を使用できます。
そのようです:
#define PIN_ONE 1
#define PIN_TWO 2
プリプロセッサーはPIN_ONE
、PIN_TWO
これらの定義がライブラリー・ヘッダー・.h
ファイルにあると想定して、番号1および2にシームレスに置き換えます。これは、他の可能なソリューションと比較して、ほとんどのリソースを必要としません。