约翰尼五和多个板 - 如何识别我连接的板

时间:2015-11-04 22:11:59

标签: javascript arduino johnny-five

让我们说我将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.之后我会用我的程序运行主代码。

我的问题是:您是否看到任何其他方法可以保证您能够"通话"纠正董事会?

1 个答案:

答案 0 :(得分:2)

选项1:使用dip开关设置设备ID

使用2或4个开关拨码开关来识别电路板。每个开关都可以转到单独的数字输入。

开关越多,您可以拥有的电路板越多

  • 1 bit - 2 board
  • 2 bit - 4 board
  • 4 bit - 16 board
  • 8位 - 256板

在2位配置中,

  • 00 - A板
  • 01 - B委员会
  • 10 - Board C
  • 11 - 董事会D

选项2:修改Firmata并硬编码设备ID

扩展和自定义firmata固件。我已经确定这不是一个很好的选择。

选项3:使用文件名/固件名称

我从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);