2

2 つの Arduino ボードをコンピューターに接続していて、ここで Johnny-five を使用したいとしましょう。ボードのそれぞれは、異なるタスクに使用されます。たとえば、1 つはセンサーを読み取り、もう 1 つはいくつかの LED を制御します。したがって、適切なボードに信号を読み書きすることが重要です。

次のことがわかったので、ここである程度の柔軟性を探しています。

ここでは、どのボードがキー A を取得し、どのボードが B を取得したのかわからず、arduino を別のマシンに接続したときにキーが反対にならないことを保証できません。

new five.Boards([ "A", "B" ]);

ここでは、どのボードがどのポートに接続されているかを正確に知っていますが、ボードを別のマシンに接続する予定がある場合はハードコーディングできません。

new five.Boards([ "/dev/cu.usbmodem621", "/dev/cu.usbmodem411" ]);

私が今持っている唯一のアイデアは、例えばピン10をボード1の+5Vに配線し、ボード2のグランドに配線することによって、一種のジャンパーを使用するか、抵抗を使用して多くの信号レベルを持つことです(接続する予定がある場合より多くのボード)、ピンをプローブして、接続されているボードの情報を取得し、それをアレイ内の A または B に割り当てます。その後、プログラムでメイン コードを実行します。

私の質問は次のとおりです。正しいボードと「話す」ことを保証する他のアプローチはありますか?

4

1 に答える 1

2

オプション 1: ディップ スイッチを使用してデバイス ID を設定する

ボードを識別するために、2 または 4 スイッチのディップ スイッチを使用します。各スイッチは、個々のデジタル入力に接続できます。

スイッチが多いほど、より多くのボードを使用できます

  • 1 ビット - 2 ボード
  • 2ビット - 4枚のボード
  • 4 ビット - 16 ボード
  • 8 ビット - 256 ボード

2ビット構成では、

  • 00 - ボード A
  • 01 - ボード B
  • 10 - ボード C
  • 11 - ボード D

オプション 2: Firmata を変更し、デバイス ID をハードコーディングする

ファーマータ ファームウェアを拡張およびカスタマイズします。これはあまり良い選択肢ではないと判断しました。

オプション 3: ファイル名/ファームウェア名を使用する

Johnny-Five と Frimata のグループから、これについて多くの良いアドバイスをもらいました。Johnny Five は、Johnny-Five のボード オブジェクトからアクセスできるファームウェア名にファイル名を使用します。

firmware: { version: [Object], name: 'AdvancedFirmata.ino' },

私の場合、AdvancedFirmata コードをコンパイルしてデバイスにアップロードするときに、ファイル名の名前を変更しただけです。

firmware: { version: [Object], name: 'boardA.ino' },

これは、プロジェクトでさまざまなボードを識別するために使用するものです。board.io.firmware.name

これが最善の解決策のようです。

更新: これは完全な例です。私の場合、私はより多くの設定を可能にしましたが、これはうまくいきます:

var boards = new five.Boards("A","B");
var j5 = {}
boards.on("ready", function(){
  this.each(function(board){

    // Set up LED on board B
    if(board.io.firmware.name == "BoardA.ino"){
      j5.ledA = new five.Led({
        pin: 13,
        board: board
      });
    }

    // Set up LED on board B
    else if (board.io.firmware.name == "BoardB.ino"){
      j5.ledB = new five.Led({
        pin: 13,
        board: board
      });
    }


  });
});

これで、次のことができます。

// Toggle LED A every 500ms
setInterval(function(){
  j5.ledA.toggle();
},500); 

// Toggle LED B every 250ms
setInterval(function(){
  j5.ledB.toggle();
},250); 
于 2016-01-11T02:42:23.050 に答える