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

时间:2017-12-04 02:04:16

标签: espruino

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

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. 我希望它能记住最后一次"配置" LED,所以我可以随时更新
  2. 如果我要关闭所有100多个LED并打开最后几个(或中间的那些),我就不必解析write()功能100+ LED,其中大多数是黑色的
  3. 这样的事情是可能的,还是我必须做一些魔术才能记住最后的LED配置?

1 个答案:

答案 0 :(得分:1)

是的,完全 - 值得查看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);
}