【问题标题】:How does the buffer from the ws2812b module work?ws2812b 模块的缓冲区是如何工作的?
【发布时间】:2017-09-02 19:49:50
【问题描述】:

这是取自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(...); ...

【问题讨论】:

    标签: lua esp8266 nodemcu


    【解决方案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

    【讨论】:

    • 我明白了,是的,这更有意义。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多