[SLOT_n]
mode = button_ledRing

Программный модуль для кнопки со светодиодным кольцом: световое пятно ставится в заданную позицию либо бежит по кольцу.

Совместимость

Принцип работы

Рапортует об изменении состояния кнопки: нажатие, отпускание, а при включённых опциях — длинное и двойное нажатие. Подсветкой управляет по командам и внутренним связям.

Подсветка работает как кольцо позиций: numOfPos задаёт число дискретных положений светового пятна, effectLen — его длину в светодиодах. Позиция устанавливается командой setPos — так подсвечивается, например, спиннер.

Топики

База топика события:

  • <deviceName>/button_<slot> — например moduleBox/button_0

База топика действия:

  • <deviceName>/led_<slot> — например moduleBox/led_0

Полный топик — база плюс направление и имя: moduleBox/button_0/event/press.

Опции

Доступные опции для кнопки:

  • buttonInverseфлаг, флаг определяет инверсию кнопки.
  • buttonDebounceGapчисло(int), глубина фильтра от дребезга контактов в мс. Диапазон 1–4096. По умолчанию 10.
  • longPressTimeчисло(int), продолжительность длинного нажатия. Диапазон 0–10000. По умолчанию 0.
  • doubleClickTimeчисло(int), длительность промежутка между нажатиями для регистрации двойного нажатия. Диапазон 0–10000. По умолчанию 0.
  • eventFilterфлаг, подавляет короткое событие press, когда сработало длинное или двойное нажатие. По умолчанию выключен — короткие события шлются всегда.
  • switchModeButtonфлаг, режим переключателя: каждое нажатие меняет состояние 0/1 и рапортует event/switch, событие press при этом не шлётся. На старте модуль рапортует switch = 0. По умолчанию выключен.

Доступные опции для подсветки:

  • numOfLedчисло(int), количество светодиодов в кольце. Диапазон 1–1024. По умолчанию 24.
  • numOfPosчисло(int), количество положений светового эффекта. Диапазон 1–4096. По умолчанию 0.
  • effectLenчисло(int), длина светового эффекта. Диапазон 1–4096. По умолчанию 0.
  • offsetчисло(int), смещение светового эффекта. По умолчанию 0.
  • dirInverseфлаг, инверсия направления эффекта.
  • ledDefaultStateчисло(int), состояние при запуске. Диапазон 0–1. По умолчанию 0.
  • minBrightчисло(int), минимальное свечение. Диапазон 0–255. По умолчанию 0.
  • maxBrightчисло(int), максимальное свечение. Диапазон 0–255. По умолчанию 255.
  • incrementчисло(int), величина приращения яркости за цикл - скорость анимации. Диапазон 0–255. По умолчанию 255.
  • RGBcolorстрока(RGB), начальный цвет в формате R G B. По умолчанию 0 0 255.
  • ledModeстрока(enum), задаёт режим анимации. Значения: default, run.
  • periodicUpdateфлаг, принудительно отправлять буфер ленты каждый цикл обновления, даже если картинка не изменилась.

Общие опции:

  • refreshRateчисло(int), частота обновления, кадров в секунду. Задаёт период опроса кнопки и период перерисовки кольца. По умолчанию 40 для кнопки и 30 для подсветки.

События

ТопикPayloadОписание
button_<slot>/event/press0 / 1Рапортует при изменении состояния кнопки
button_<slot>/event/longPress0 / 1Рапортует при регистрации длинного нажатия
button_<slot>/event/doubleClick0 / 1Рапортует при регистрации двойного нажатия
button_<slot>/event/switch0 / 1Состояние переключателя, при опции switchModeButton

Пример: топик moduleBox/button_0/event/longPress, payload 1.

События longPress и doubleClick рапортуются только при ненулевых опциях longPressTime и doubleClickTime соответственно.

Команды

ТопикPayloadОписание
led_<slot>/action/toggleLedStateПереключить состояние подсветки на противоположное
led_<slot>/action/setRGBR G BКоманда задаёт цвет подсветки. Три параметра RGB ‘0 0 255’
led_<slot>/action/setPosцелоеКоманда задаёт положение светового эффекта - используется при подсветке спиннера. Один параметр - номер позиции
led_<slot>/action/setModedefault, runУстановить режим анимации цветов. default(по умолчанию), run
led_<slot>/action/enable0 / 1Включить (1) или выключить (0) подсветку

Режимы анимации

  • default — световое пятно стоит статично в позиции, заданной командой setPos.
  • run — пятно движется по кольцу, скорость задаётся опцией increment.

Примеры

[SLOT_2]
mode = button_ledRing
options = RGBcolor:255 0 0, ledMode:run, effectLen:20
;состояние кнопки передаётся в подсветку
crosslink = button_2/event/press:@->led_2/action/enable:@

Красное пятно длиной 20 светодиодов бежит по кольцу, пока кнопка нажата.

[SLOT_3]
mode = button_ledRing
options = numOfLed:24, numOfPos:24, ledMode:default
;позиция энкодера задаёт положение светового пятна
crosslink = encoder_0/event/val:@->led_3/action/setPos:@

Подробнее — внутренние связи (crossLink).

Архив

Описание модуля для прошивок до перехода на конституцию — button_ledRing (архив).