0

johnny-five (Multiple Boards) に少し問題があります。誰かが私のためにこれに光を当てることができますか?

2 つの Arduino が接続されており、「var board = new five.Board()」を使用して個別に完全にアクセスできます。

Cylon.js で両方を正常に接続して使用できます。

ただし、「new five.Boards()」を利用しようとすると、「ready」イベントが発行されないように見えるため、ロジックのコーディングを開始できます。

(少し変更された) johnny-five/eg/boards-multi.js の使用

var five = require("../lib/johnny-five.js");
var boards = new five.Boards(["A", "B"]);

// Create 2 board instances with IDs "A" & "B"
boards.on("ready", function() {

  // Both "A" and "B" are initialized
  // (connected and available for communication)

  // |this| is an array-like object containing references
  // to each initialized board.
  this.each(function(board) {

    console.log("READY"); // NOTE: this never executes

    // Initialize an Led instance on pin 13 of
    // each initialized board and strobe it.
    var led = new five.Led({
      pin: 13,
      board: board
    });

    led.blink();
  });
});

私のコンソールは次のように表示されます:

1437253899028 Device(s) /dev/ttyACM1,/dev/ttyACM0
1437253899104 Connected /dev/ttyACM1
1437253899121 Device(s) /dev/ttyACM0
1437253899126 Connected /dev/ttyACM0
1437253901860 Board ID:  A
1437253901862 Board ID:  B

...そして私は永遠に待っていますが、「準備完了」は決して出ません...

注 1: 両方の最新の「StandardFirmata」を数回再アップロードしました。そして、それらは単独で問題なく動作します。

注2:3つの異なるシステム(ubuntu Linux、Windows、およびRaspberry PI 2Bの1つ)でまったく同じセットアップを試しましたが、すべてで同じ問題が発生しました...

ここで骨の折れる何かが欠けているかどうかはわかりません。しかし、私が何をしようとしても、ジョニーファイブは私が先に進むことを許可しません. 上で述べたように、Cylon で完全に動作するように見えますが、かなりの量のコードが既に配置されているため、j5 を使用したいと考えています私のシステムへのArduino。

どんな助けでも大歓迎です!

更新 #1:

少し近づいてきました。これで、各 Arduino ボードに対処できます。でも; 「準備完了」イベントを適切にキャッチする方法にまだ困惑しています。

var five = require('johnny-five');
var ports = [
  { id: "A", port: "/dev/ttyACM0" },
  { id: "B", port: "/dev/ttyACM1" }
];

var boards = new five.Boards(ports).on('ready', function() {
  // does nothing?
  console.log("THIS SHOULD TRIGGER");
});

// Waiting 5 seconds for the boards to init, instead of "ready" event.
setTimeout( function() {
  console.log(boards[0].isReady);
  console.log(boards[1].isReady);
}, 5000);

これは、次のコンソール出力で終了します。

1437268012413 Connected /dev/ttyACM0
1437268012427 Connected /dev/ttyACM1
1437268015161 Board ID:  A
1437268015163 Board ID:  B
true
true

....この時点で、ボードに対処するために次のことができます (もちろん setTimeout() 内で):

  var led1 = new five.Led( {
    pin: 6,
    board: boards[0]
  });
  led1.on();
  var led2 = new five.Led( {
    pin: 4,
    board: boards[1]
  });
  led2.on();

とらえどころのない「準備ができている」をキャッチできない理由をまだ判断しようとしています。

更新 #2:

私はそれを理解したように見えます。実際には準備ができていましたが、API を正しく使用していませんでした。

作業コード:

new five.Boards(ports).on('ready', function( boards ) {
  console.log( boards );  // ready emits
});

更新 #3:

ライブラリでバグを見つけたと思います。

以下のファイルのようです。

node_modules/johnny-five/lib/board.js

ライン: 1109

変更する場合:

if (this.repl) 
to
if (false && this.repl)

「ready」イベントを発行しているようです。

4

1 に答える 1

0

repl の初期化にバグが見つかりました。これは次のリリースで修正される予定です。state.board.info(...)問題はinへの呼び出しで、最近のボード ロギングおよびロギング関数定義のリファクタリング中の見落としの結果Repl.prototype.initialize、メソッドが定義されていませんでした。infoこのバグは v0.8.85 で発生したためnpm install johnny-five@0.8.84、次のリリースまで問題を解決してください。

于 2015-07-23T15:43:07.520 に答える