ws2812b模块的缓冲区如何工作?

时间:2017-04-07 12:16:14

标签: lua esp8266 nodemcu

这是取自ws2812 documentation

的示例
ws2812.init()
local i, buffer = 0, ws2812.newBuffer(300, 4); buffer:fill(0, 0, 0, 0); tmr.create():alarm(50, 1, function()
  i = i + 1
  buffer:fade(2)
  buffer:set(i % buffer:size() + 1, 0, 0, 0, 255)
  ws2812.write(buffer)
end)

首先,我尝试将其翻译成更具可读性的东西,因为我使用RGB而不是RGBW LED,我还删除了W组件:

local numberOfLeds = 300
local bytesPerLed = 3 -- (R, G and B)

ws2812.init()

local i
local buffer = 0

ws2812.newBuffer(numberOfLeds, bytesPerLed)
buffer:fill(255, 255, 255)

tmr.create():alarm(50, 1, function() -- repeat every 50 milliseconds
    i = i + 1
    buffer:fade(2)
    buffer:set(i % buffer:size() + 1, 255, 255, 255)
    ws2812.write(buffer)
end)
但是,这对我来说没有任何意义。为什么buffer有填充方法?我的意思是我们不把它简单地设为0吗? buffer = 0 我是否错误地翻译了这个? 原始代码说local i, buffer = 0, ws2812.newBuffer(...); ...

1 个答案:

答案 0 :(得分:1)

原始代码相当于

local i = 0
local buffer = ws2812.newBuffer(300, 4); buffer:fill(0, 0, 0, 0); tmr.create():alarm(50, 1, function()

一般来说,

local x,y,z = a,b,c

相当于

local x = a
local y = b
local z = c

请参阅manual