2017-04-07 30 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