2017-04-07 55 views
1

这是从ws2812 documentation截取的示例:ws2812b模块的缓冲区是如何工作的?

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

原始代码相当于

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

+0

我明白了,是的,这样做更有意义。谢谢。 – Forivin