• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

NodeMCU + Lua + WS2812

vasai

New member
Добрый день. Я только недавно начал изучать, nodemcu и lua, поэтому заранее извиняюсь, если данный вопрос уже поднимался. Но поиском по форуму я эту тему найти не смог. Суть вопроса, необходимо сделать, чтоб диодная лента ws2812 длиной 60 светодиодов, загоралась постепенно по одному светодиоду с каждой стороны, т.е. каждый с края одновременно ,потом + 1 к центру.
В документации nodemcu есть примеры работы с лентой, но не совсем понятные, к примеру:
Код:
ws2812.init()
local i, buffer = 0, ws2812.newBuffer(60, 3); buffer:fill(0, 0, 0); tmr.alarm(0, 50, 1, function()
        i=i+1
        buffer:fade(2)
        buffer:set(i%buffer:size()+1, 0, 0, 255)
        ws2812.write(buffer)
end)
В данном примере, получается бегущий огонек, т.е. загораются по очереди, а предыдущий тухнет. Подскажите пожалуйста, какой параметр отвечает за это, чтоб предыдущий не затухал?
И как можно сделать одновременно с двух концов, если i=i+1 поменять на i=i-1, начнется бегущий огонек с конца ленты, подскажите как сделать одновременно, не могу понять логику
 

Юрий Ботов

Moderator
Команда форума
Никогда не работал с лентой, но могу предположить что
  • ws2812.init()
  • local i, buffer = 0, ws2812.newBuffer(60, 3); buffer:fill(0, 0, 0); tmr.alarm(0, 50, 1, function()
  • i=i+1
  • buffer:fade(2) -- это судя по названию отвечает за угасание после некой задержки
  • buffer:set(i%buffer:size()+1, 0, 0, 255)
    • buffer:set(i%buffer:size()-1, 0, 0, 255) -- а вот так можно зажечь лампочки с обеих сторон
  • ws2812.write(buffer)
  • end)
Вопрос что вы будете делать когда все зажглось? Дальше бесконечный цикл во включенном состоянии...
 

vasai

New member
Никогда не работал с лентой, но могу предположить что

Вопрос что вы будете делать когда все зажглось? Дальше бесконечный цикл во включенном состоянии...
Спасибо, Вы правы. Fade отвечает за затухание. А вот одновременное включение так тоже не работает
Код:
PANIC: unprotected error in call to Lua API (ws2812_test.lua:6: bad argument #1 to 'set' (index out of range))
Суть такая, одна функция отвечает за включение, другая за выключение. т.е. планируется отсылать команду, и будет выполняться конкретное действие.
 

vasai

New member
Помогите пожалуйста разобраться, так и не получается решить данную проблему
 
Сверху Снизу