Индикация и мелодии
Модуль indication управляет RGB-светодиодами, двухцветными индикаторами,
зуммерами и мелодиями. Доступны классы RGBLeds, RGLeds, Leds, Buzzer
и Sound.
local indication = require("indication")
local default_leds = indication.Leds.new()
local one_rgb = indication.RGBLeds.new {
ledPin = pio.GPIO0,
ledCnt = 1,
ledType = neopixel.WS2812B,
}
local rg = indication.RGLeds.new { Rled = pio.GPIO4, Gled = pio.GPIO5 }
local buzzer = indication.Buzzer.new(pio.GPIO21, 3200)
local melody = indication.Sound.new(pio.GPIO21, 180) -- GPIO, BPM
Поля leds, rled и gled доступны для чтения.
Настройка поведения
Методы отдельного объекта можно заменить функциями Lua. Изменение действует только на этот объект:
local leds = indication.RGBLeds.new()
leds.ok = function(self, time_ms)
self:set(0, 0, 255, time_ms or 250)
end
leds:ok()
leds.ok = nil -- восстановить стандартное поведение
Методу можно присвоить только функцию или nil; другое значение вызывает
ошибку.
RTTTL
sound принимает мелодию одной строкой в формате RTTTL:
local dev = sound.attach(sound.PWM, pio.GPIO21)
dev:playrtttl("ready:d=8,o=5,b=180:c,e,g,4c6")
-- Короткий алиас с тем же форматом
dev:play("error:d=4,o=4,b=120:g,p,d2")
Формат состоит из имени, параметров d (длительность по умолчанию), o
(октава) и b (BPM), затем списка нот. Поддерживаются пауза p, диез #,
бемоль b, явная октава и точка для увеличения длительности в полтора раза.
Стандартные длительности: 1, 2, 4, 8, 16, 32, 64. Для низких
сигналов индикации парсер также принимает октавы 0–3.
У indication.Sound есть такой же метод playrtttl(). Метод play(note, octave) оставлен для совместимости со старым API playnote: цифры внутри
note обозначают делитель длительности, а второй аргумент — октаву.