使用 Espruino 的 NeoPixel 模块打开特定的 LED?

Turn on specific LED using NeoPixel module for Espruino?

我正在尝试使用 the NeoPixel module 打开特定的 LED。它的工作原理非常简单:将其解析为 RGB 颜色的二维数组。这是一个例子:

require("neopixel").write(NodeMCU.B2, [[255, 0, 0], [0, 255, 0], [0, 0, 255]]);

这将点亮前三个 LED,分别为红色、绿色和蓝色。我想要一个函数,在那里我可以做类似的事情:

function single(number, color) {
    require("neopixel").write(NodeMCU.B2, number, color);
}

single(0, [255, 0, 0]);
single(1, [0, 255, 0]);
single(2, [0, 0, 255]);

这与上面的完全相同。现在你可能会问:你为什么想要那个?恩:

  1. 我想让它记住最后一个 "configuration" LED,这样我就可以随时更新它
  2. 如果我想关闭我所有的 100 多个 LED 并只打开最后几个(或中间的),我就不必解析 write() 函数 100 多个 LED,其中大部分是黑人

这样的事情是否可能,或者我是否需要施展魔法才能记住最后的 LED 配置?

是的,完全是 - 值得看看 http://www.espruino.com/WS2811 上的 neopixel 文档,因为他们建议您使用数组来 存储当前状态。

一旦你有了那个数组——这里叫做 arr——你可以使用 .set 方法将 3 个元素设置在正确的位置(3 倍的数字,因为 RGB),然后可以重新发送整个数组。

var arr = new Uint8ClampedArray(NUM_OF_LEDS*3);

function single(number, color) {
  arr.set(color, number*3);
  require("neopixel").write(NodeMCU.B2, arr);
}