让我们说我将2个Arduino板连接到电脑,我想在这里使用Johnny-five。每个电路板用于不同的任务,例如一个读取传感器,另一个控制一些LED。因此,对适当的电路板读/写信号非常重要。
我在这里寻找一些灵活性,因为我发现了:
在这里,我不知道哪个电路板有A键和哪个B,当我将arduinos连接到另一台机器时,我无法保证按键不会相反:
new five.Boards([ "A", "B" ]);
我确切地知道哪个主板连接到哪个端口,但如果我打算将主板连接到另一台机器,我就无法对其进行硬编码:
new five.Boards([ "/dev/cu.usbmodem621", "/dev/cu.usbmodem411" ]);
我现在唯一的想法是使用一种跳线,例如通过接线板1上的引脚10至+ 5V,以及板2上的接地,或者甚至使用电阻器并具有许多信号电平(如果我计划连接更多的电路板),然后探测引脚,只是获取我所连接的电路板的信息,并将其分配给阵列中的A或B.之后我会用我的程序运行主代码。
我的问题是:您是否看到任何其他方法可以保证您能够"通话"纠正董事会?
答案 0 :(得分:2)
使用2或4个开关拨码开关来识别电路板。每个开关都可以转到单独的数字输入。
开关越多,您可以拥有的电路板越多
在2位配置中,
扩展和自定义firmata固件。我已经确定这不是一个很好的选择。
我从Johnny-Five& amp; 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);