1

我正在用 javascript 编程 arduino 板。我正在尝试使用 johnny-5 库连接多个 arduino 板。我遵循了johnny-5 文档,我可以同时在两个板上选通 LED 13。

但是我的问题是我想一次控制一个 LED。如何专门初始化每个板上的 LED?

4

2 回答 2

3

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

该类Boards构造一个包含多个棋盘对象的集合对象。如果未传递任何参数,Board则会按照系统枚举它们的顺序为检测到的每个板创建对象。

另请参阅:董事会

参数

  • 端口端口对象或端口地址字符串的列表。端口对象可能具有以下属性:
属性名称 类型 值 描述 必需的 id 编号、字符串 任何 用户可定义的标识 否 端口字符串 “/dev/ttyAM0”、“COM1” 设备端口/COM 的路径或名称 否

初始化多个板

初始化多个板对象的最简单方法是Boards使用new. 不必担心知道设备的路径或 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);

董事会准备就绪

一旦板对象被初始化,它们必须通过一组握手步骤连接到物理板,一旦完成,板就可以与程序通信了。这个过程是异步的,并通过“就绪”事件向程序表示。

// 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))为每个板对象调用一次函数。

...

目前没有提到的一件事,我将对此进行更新,即处理程序this内部ready是一个类似数组的对象,其中包含对每个已初始化板的引用,按照它们的创建顺序:

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

});
于 2014-08-12T02:30:46.687 回答
-1

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

var five = require("johnny-five"),
    boardNumberOne = new five.Board();
    boardNumberTwo = new five.Board();
于 2014-08-11T07:04:25.327 回答