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」イベントを発行しているようです。