首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >约翰尼-五个多个阿杜奥诺连接,但没有发射“准备”。

约翰尼-五个多个阿杜奥诺连接,但没有发射“准备”。
EN

Stack Overflow用户
提问于 2015-07-18 21:39:49
回答 1查看 465关注 0票数 0

我和约翰尼-五(多块板)有点矛盾,有人能帮我解释一下吗?

我有两个Arduino连接,我可以使用"var board =newfive.Board()“单独访问它们。

我可以用Cylon.js成功地连接和使用它们。

但是,当我试图利用“新five.Boards()”时,它似乎从未发出“就绪”事件,因此我可以开始编写逻辑代码。

使用(稍作修改的)johnny-5/例如/boards multi.js

代码语言:javascript
复制
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();
  });
});

我的控制台显示:

代码语言:javascript
复制
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

...and,我永远在等待,它从来没有“准备好”.

注1:我已经多次将最新的"StandardFirmata“上传到这两家公司;它们自己也能正常工作。

注2:我在三个不同的系统(一个ubuntu,一个在Windows上,和一个Raspberry PI 2B)上尝试了相同的设置,在所有的.

我不知道我是不是漏掉了什么东西,不管我怎么尝试,强尼--五只都不允许我继续前进。正如我上面提到的,它似乎与赛昂完美地工作-然而,我宁愿使用j5,因为我已经有了相当多的代码,我不想移植到赛昂,只是为了连接多个Arduino到我的系统。

任何帮助都将不胜感激!

更新#1:

我越来越近了,我现在可以向每个阿杜诺董事会讲话了。然而,我仍然困惑于如何正确地抓住“准备”事件。

代码语言:javascript
复制
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);

这将以以下控制台输出结束:

代码语言:javascript
复制
1437268012413 Connected /dev/ttyACM0
1437268012427 Connected /dev/ttyACM1
1437268015161 Board ID:  A
1437268015163 Board ID:  B
true
true

....at这一点,我可以做以下工作来解决板(当然是在setTimeout()中):

代码语言:javascript
复制
  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。

工作守则:

代码语言:javascript
复制
new five.Boards(ports).on('ready', function( boards ) {
  console.log( boards );  // ready emits
});

更新#3:

我想我在图书馆里发现了一个窃听器。

似乎以下文件:

节点_模块/约翰尼-5/lib/board.js

线路:1109

如果你改变了:

代码语言:javascript
复制
if (this.repl) 
to
if (false && this.repl)

它似乎发出了“就绪”事件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-23 15:43:07

我在repl初始化中发现了一个bug,这将在下一个版本中修复。问题是对state.board.info(...)Repl.prototype.initialize中的调用,其中info方法是由于最近在板日志记录和日志记录函数定义重构过程中出现的疏忽而未定义的。这个错误出现在v0.8.85中,所以请尝试npm install johnny-five@0.8.84来解决这个问题,直到下一个版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31495847

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档