[SLOT_n]
mode = button_ledBar

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

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

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

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

Подсветка работает как линейная шкала: команда setPos задаёт уровень заполнения, светодиоды от начала ленты до этой позиции горят цветом RGBcolor, остальные — с яркостью minBright. Флаг dirInverse разворачивает направление заполнения.

Топики

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

  • <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–65535. По умолчанию 0.
  • doubleClickTime — число(int), длительность промежутка между нажатиями для регистрации двойного нажатия. Диапазон 0–65535. По умолчанию 0.
  • eventFilter — флаг, подавляет короткое событие press, когда сработало длинное или двойное нажатие. По умолчанию выключен — короткие события шлются всегда.
  • switchModeButton — флаг, режим переключателя: каждое нажатие меняет состояние 0/1 и рапортует event/switch, событие press при этом не шлётся. На старте модуль рапортует switch = 0. По умолчанию выключен.

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

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

Общие опции:

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

События

ТопикPayloadОписание
button_<slot>/event/pressцелоеРапортует при изменении состояния кнопки
button_<slot>/event/longPressцелоеРапортует при регистрации длинного нажатия
button_<slot>/event/doubleClickцелоеРапортует при регистрации двойного нажатия
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Команда задаёт цвет подсветки. Три параметра R G B
led_<slot>/action/setPosцелоеКоманда задаёт положение светового эффекта. Один параметр - номер позиции
led_<slot>/action/enable0 / 1Включить (1) или выключить (0) подсветку

Примеры

[SLOT_0]
mode = button_ledBar
options = numOfLed:30, numOfPos:30, RGBcolor:0 255 0, maxBright:180
;значение аналогового входа отображается уровнем шкалы
crosslink = analog_1/event/rawVal:@->led_0/action/setPos:@

Зелёная шкала из 30 светодиодов показывает текущее значение аналогового входа.

[SLOT_1]
mode = button_ledBar
options = numOfLed:16, dirInverse, RGBcolor:255 128 0
;каждое нажатие увеличивает счётчик, счётчик задаёт уровень шкалы
crosslink = button_1/event/press:1->counter_6/action/set:+1

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