Johnny五个和多个板-如何识别我连接到的板



假设我正在将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:使用dip开关设置设备ID

使用2或4开关的dip开关来识别电路板。每个开关都可以连接到一个单独的数字输入。

交换机越多,就越多

  • 1位-2块板
  • 2位-4块板
  • 4位-16板
  • 8位256板

在2位配置中,

  • 00-板A
  • 01-板B
  • 10-板C
  • 11-板D

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

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

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

我从Johnny Five&Frimata团体。Johnny Five使用文件名作为固件名称,Johnny Fife中的板对象可以访问该文件名。

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

最新更新