ライブラリのピンマッピングを構成可能にする適切な方法は何ですか?


8

特定のハードウェアチップと対話するためのAPIを提供するいくつかのライブラリを使用しています(これらのドライバーを作成しますか?)。ただし、カスタムボードやシールドが異なると、チップが異なるピンにマッピングされ、ライブラリをケースごとに変更する必要があります。ライブラリを変更する必要がある場合、Arduino IDEライブラリマネージャーではうまく機能しません。

ライブラリ自体を毎回変更する必要がないように、この構成を公開するための推奨/推奨パターンはありますか?

これは、ボードのピンレイアウトに一致するように変更する必要があるパーツが文書化されている例です。


通常のArduinoライブラリの多くはすでにこれを行っています。まず、ユーザーの観点からでも、その方法に慣れることから始めます。
クリスストラットン

回答:


6

私が使用する方法は、ピンをパラメーターとしてコンストラクターに提供することです。これらのピン番号は、後で.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);

6

次の2つの可能性のいずれかを使用します。

(クラス)変数を使用し、コンストラクター内で設定します。

利点:

  • 常に初期化
  • 使いやすい(コンストラクターとピン設定を一度に)

別の(例:Init)メソッドを使用します。

利点:

  • 動的に変更可能

備考

ピン設定では、ほとんどの場合静的回路が使用されるため、最初のアプローチがおそらくより良いでしょう。

設定については、主に2番目の方法の方が適しています。

多くのピンが含まれている場合(そうではない)、構造または別のピン設定クラスを使用します。

マクロ

私がアドバイスしないのはマクロです。ユーザーが自分でソースコードを変更する必要があり、新しいバージョンがインストールされている場合、変更を再度マージまたはやり直す必要があります。利点は、(マシン)コードが少し少なく、おそらく少し高速で、メモリ使用量が少し少ないですが、3つの側面はすべて最小限です。


2

あなたのアプローチに応じて。

1)バイナリ+ヘッダーファイルを提供するだけの場合は、ピンを変数にする必要があります。

2)ソースコードを提供し、ユーザーにソースコードの再コンパイルを期待する場合は、マクロを使用します。


2

Arduinoでは一般的に過剰なC ++コンストラクターのようなものを避けたい場合は、#define's(オブジェクトのようなマクロ)を使用できます。

そのようです:

#define PIN_ONE 1
#define PIN_TWO 2

プリプロセッサーはPIN_ONEPIN_TWOこれらの定義がライブラリー・ヘッダー・.hファイルにあると想定して、番号1および2にシームレスに置き換えます。これは、他の可能なソリューションと比較して、ほとんどのリソースを必要としません。


問題は、.inoファイルとライブラリソースの両方がアクセスできる場所にある必要があることです。これは通常、必要なすべてのものを含む個別のヘッダーファイルを意味します。
Ignacio Vazquez-Abrams

本気ですか?.inoで#defineスイッチを実行でき、それらがライブラリで使用されていることを確認してください。
Avamander 2017

1
ライブラリのコードが厳密にヘッダーにある場合は機能しますが、完全に別のコンパイルユニットにある場合は機能しません。
Ignacio Vazquez-Abrams

ええ、それは理にかなっています、正確な制限を知りませんでした、その免責事項を付け加えました。
Avamander 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.