【问题标题】:Johnny five and multiple boards - how to recognize which board I am connected toJohnny 5 和多个板 - 如何识别我连接到哪个板
【发布时间】:2015-11-04 22:11:59
【问题描述】:

假设我将 2 个 Arduino 板连接到计算机,我想在这里使用 Johnny-5。每个板用于不同的任务,例如一个读取传感器,另一个控制一些 LED。所以对我来说,将信号读/写到适当的板上很重要。

我在这里寻求一些灵活性,因为我发现:

这里我不知道哪个板有密钥 A 和哪个 B,我不能保证当我将我的 arduinos 连接到另一台机器时密钥不会相反:

new five.Boards([ "A", "B" ]);

这里我确切知道哪个板连接到哪个端口,但如果我打算将板连接到另一台机器,我无法对其进行硬编码:

new five.Boards([ "/dev/cu.usbmodem621", "/dev/cu.usbmodem411" ]);

我现在唯一的想法是使用一种跳线,例如将板 1 上的 pin10 连接到 +5V,然后在板 2 上接地,或者甚至使用电阻器并具有多个信号电平(如果我计划连接更多板),然后探测引脚并获取我连接到哪个板的信息并将其分配给阵列中的 A 或 B。之后,我将使用我的程序运行主代码。

我的问题是:您是否看到任何其他方法可以保证您与正确的董事会“交谈”?

【问题讨论】:

    标签: javascript arduino johnny-five


    【解决方案1】:

    选项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 小组那里得到了很多很好的建议。强尼五号使用文件名作为固件名称,强尼五号中的板对象可以访问该文件名。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多