使用Johnny 5的多个Arduino板



我在javascript编程arduino板。我正在尝试使用约翰尼五库连接多个arduino板。我遵循了约翰尼- 5的文档,我可以同时在两个板上闪动13。

然而,我的问题是我想一次控制一个led。我如何具体初始化每个板上的led ?

文档中有很多Boards(注意是复数)类的例子。我直接复制了以下内容:

Boards类构造了一个包含多个board对象的集合对象。如果没有传递参数,Board对象将按照系统枚举它们的顺序为每个检测到的板创建。

参见:Board

参数

  • ports端口对象或端口地址字符串的列表。端口对象可以有以下属性:
属性名类型值(年代)描述要求id数字、字符串任何用户自定义标识没有港口字符串"/dev/ttyAM0"、"COM1"设备端口/COM的路径或名称没有

初始化多板

初始化多个板对象的最简单方法是用new调用Boards构造函数。不用担心知道设备的路径或COM端口,Johnny-Five会自动找出兼容板正在使用哪些usb。

// Create 2 board instances with IDs "A" & "B" 
// (ports will be initialized in device enumeration order)
new five.Boards([ "A", "B" ]);

// Create two board instances on ports 
// "/dev/cu.usbmodem621" and 
// "/dev/cu.usbmodem411"
new five.Boards([ "/dev/cu.usbmodem621", "/dev/cu.usbmodem411" ]);

var ports = [
  { id: "A", port: "/dev/cu.usbmodem621" },
  { id: "B", port: "/dev/cu.usbmodem411" }
];
new five.Boards(ports);

董事会准备

一旦板对象被初始化,它们必须通过一组握手步骤连接到物理板,一旦完成,板就准备好与程序通信。这个过程是异步的,通过一个"ready"事件通知程序。

// Create 2 board instances with IDs "A" & "B"
new five.Boards([ "A", "B" ]).on("ready", function() {
  // Both "A" and "B" are initialized
  // (connected and available for communication)
});

通过提供显式的端口路径覆盖此:

var ports = [
  { id: "A", port: "/dev/cu.usbmodem621" },
  { id: "B", port: "/dev/cu.usbmodem411" }
];
new five.Boards(ports).on("ready", function() {
  // Both "A" and "B" are initialized
  // (connected and available for communication)
});
使用

Boards构造函数的基本但完整的用法示例:
// Create 2 board instances with IDs "A" & "B"
new five.Boards([ "A", "B" ]).on("ready", function() {
  // Both "A" and "B" are initialized
  // (connected and available for communication)
  // |this| is an array-like object containing references
  // to each initialized board.
  this.each(function(board) {
    // Initialize an Led instance on pin 13 of
    // each initialized board and strobe it.
    new five.Led({ pin: 13, board: board }).strobe();
  });
});

通过提供显式的端口路径覆盖此:

var ports = [
  { id: "A", port: "/dev/cu.usbmodem621" },
  { id: "B", port: "/dev/cu.usbmodem411" }
];
new five.Boards(ports).on("ready", function() {
  // Both "A" and "B" are initialized
  // (connected and available for communication)
  // |this| is an array-like object containing references
  // to each initialized board.
  this.each(function(board) {
    // Initialize an Led instance on pin 13 of
    // each initialized board and strobe it.
    new five.Led({ pin: 13, board: board }).strobe();
  });
});

说明当使用多个单板时,所有的设备类必须初始化,并显式引用它们将关联到的单板对象。这在前面的代码示例中进行了说明。

API

each(callback(board, index))为每个board对象调用一次函数

目前没有提到的一件事,我将更新这样做,ready处理程序中的this是一个类似数组的对象,包含对每个初始化板的引用,按照它们被创建的顺序:

var ports = [
  { id: "A", port: "/dev/cu.usbmodem621" },
  { id: "B", port: "/dev/cu.usbmodem411" }
];
// Create 2 board instances with IDs "A" & "B"
new five.Boards(ports).on("ready", function() {
  // Both "A" and "B" are initialized
  // (connected and available for communication)
  this[0]; // <-- this is board A reference
  this[1]; // <-- this is board B reference
});

我想你可以使用他们的id s访问每个板。或者您可以实例化两个具有不同名称的板,例如:

var five = require("johnny-five"),
    boardNumberOne = new five.Board();
    boardNumberTwo = new five.Board();

最新更新