Перейти к содержанию
Материалы раздела

Индикация и мелодии

Модуль 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. Для низких сигналов индикации парсер также принимает октавы 03.

У indication.Sound есть такой же метод playrtttl(). Метод play(note, octave) оставлен для совместимости со старым API playnote: цифры внутри note обозначают делитель длительности, а второй аргумент — октаву.