ws2812b 模块的缓冲区如何工作?
How does the buffer from the ws2812b module work?
这是取自 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
有一个 fill 方法?我的意思是我们不是将它设置为 0 吗? buffer = 0
我是不是翻译错了?
原码说local i, buffer = 0, ws2812.newBuffer(...); ...
原代码等同于
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。
这是取自 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
有一个 fill 方法?我的意思是我们不是将它设置为 0 吗? buffer = 0
我是不是翻译错了?
原码说local i, buffer = 0, ws2812.newBuffer(...); ...
原代码等同于
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。