首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >firmatajs,多个Arduino给出超时(约翰尼-5,cylonjs)

firmatajs,多个Arduino给出超时(约翰尼-5,cylonjs)
EN

Stack Overflow用户
提问于 2014-12-11 09:27:28
回答 1查看 1.3K关注 0票数 2

我有两个Arduino unos与标准StandardFirmata闪烁,我正在尝试多板演示与一个简单的节点项目(约翰尼-五个npm软件包)。当我单独尝试时,两个arduinos都能工作。使用以下代码:

代码语言:javascript
复制
var five = require("johnny-five");

var boardOne = new five.Board({ id: "A", port: "/dev/cu.usbmodem1d1141" });
boardOne.on("ready", function(){
    var led = new five.Led({
    pin: 13,
    board: this
    });
    led.on();
});

node index.js 
1418288836782 Connected /dev/cu.usbmodem1d1141 
1418288836784 Repl Initialized 
>> 

当尝试多板示例时,我得到:设备或固件错误--连接到板时发生超时。请检查您是否正确地用正确的固件闪烁了板。

代码语言:javascript
复制
var five = require("johnny-five");

var ports = [
    { id: "A", port: "/dev/cu.usbmodem1d1141" },
    { id: "B", port: "/dev/cu.usbmodem1d1131" }
];

new five.Boards(ports).on("ready", function(){
    var led = new five.Led({
        pin: 13,
        board: this[0]
    });
    led.on();
});

更新#1:

出于好奇,我试图在usb电缆周围切换,得到了一些不同的结果:

1)似乎只有一个arduino连接着:

代码语言:javascript
复制
1418318698635 Device(s) /dev/cu.usbmodem1a1231,/dev/cu.usbmodem1a1241 
1418318698642 Device(s) /dev/cu.usbmodem1a1241 
1418318701849 Connected /dev/cu.usbmodem1a1231 
1418318701850 Board ID:  A 

或者2)我得到了一个错误:

代码语言:javascript
复制
.../johnny-five-master/node_modules/firmata/lib/firmata.js:246
board.pins[pin].analogChannel = currentValue;
                              ^
TypeError: Cannot set property 'analogChannel' of undefined
at Object.SYSEX_RESPONSE.(anonymous function) [as 106] 
(.../johnny-five-master/node_modules/firmata/lib/firmata.js:246:35)

更新#2:

我用cylon.js做了上面的测试,得到了同样的结果。仍然不知道如何解决这个问题:(一个arduino工作很好,多个什么都不做。(可能是osx相关的问题?)

更新#3:

我在约翰尼-5代码中添加了一些日志,这肯定是一个连接问题(我认为!?)第二个阿杜伊诺从来没有回应。我改变了arduinos的顺序,得到了相同的结果(第一个连接,另一个没有响应)。这个连接是异步的,所以它可能会在某个地方被阻塞。两个阿杜亚诺岛的灯光都显示出一些行动正在进行中。

代码语言:javascript
复制
node index.js
err: undefined --- type: connect --- io: /dev/tty.usbmodem1d1111
err: undefined --- type: connect --- io: /dev/tty.usbmodem1d1121
err: undefined --- type: ready --- io: /dev/tty.usbmodem1d1111
1418467187527 Connected /dev/tty.usbmodem1d1111 
1418467187527 Board ID:  A 
1418467284327 Device or Firmware Error A timeout occurred while connecting to the Board. 
Please check that you've properly flashed the board with the correct firmware.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-14 17:54:47

感谢@izar发布这篇文章,然后在约翰尼-五基特频道给我们带来这个问题。从那里开始,Divan (来自约翰尼-五个核心团队)致力于对该bug进行分类,并能够通过复制确认。这暴露了Firmata.js中的一个错误,其中传递给Serialport的选项是由该类扩展的。由于默认对象被重用,而且Object.assign不是“深度”操作,所以更改是对引用而不是副本进行的。结果是,第二个初始化得到了一组“默认值”,这些“默认值”与第一个实例自己的数据一起加载。通过将Firmata更改为对每个实例使用新的默认值来解决此问题。这是补丁

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

https://stackoverflow.com/questions/27419344

复制
相关文章

相似问题

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