[SLOT_n]
mode = button_runFire

Программный модуль для кнопки с бегущим световым эффектом на ленте адресных светодиодов.

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

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

Рапортует об изменении состояния кнопки. В активном состоянии формирует бегущий световой эффект: каждый цикл обновления сдвигает массив пикселей и рассчитывает новый пиксель в зависимости от выбранного режима анимации. В неактивном состоянии плавно гасит ленту до минимальной яркости со скоростью increment.

Топики

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

  • <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.
  • ledsPerPixelчисло(int), количество светодиодов в одном логическом пикселе - один расчёт цвета применяется к группе. Диапазон 1–256. По умолчанию 1.
  • effectLenчисло(int), длина светового эффекта для sin, sinAbs - число пикселей в одном периоде синусоиды. Диапазон 1–4096. По умолчанию 0.
  • offsetчисло(int), смещение светового эффекта. По умолчанию 0.
  • ledInverseфлаг, инверсия направления эффекта. Без флага движение идёт от 0 к numOfLed, с флагом — от конца к началу.
  • ledDefaultStateчисло(int), состояние при запуске. Диапазон 0–1. По умолчанию 0.
  • minBrightчисло(int), минимальное свечение. Диапазон 0–255. По умолчанию 0.
  • maxBrightчисло(int), максимальное свечение. Диапазон 0–255. По умолчанию 255.
  • incrementчисло(int), величина приращения яркости за цикл - скорость плавного затухания. Диапазон 1–255. По умолчанию 5.
  • RGBcolorстрока(RGB), начальный цвет в формате R G B. По умолчанию 0 0 255.
  • animModeстрока(enum), задаёт режим анимации. Значения: rainbow, sin, sinAbs.
  • 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Команда задаёт цвет подсветки. Три параметра R G B
led_<slot>/action/enable0 / 1Включить (1) или выключить (0) эффект

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

  • rainbow — бегущая радуга. Каждый новый пиксель получает следующий оттенок цветового круга HSV с максимальной насыщенностью и яркостью maxBright.
  • sin — синусоидальная яркость с периодом effectLen. В положительной части синусоиды яркость плавно меняется от minBright до maxBright, в отрицательной — фиксируется на minBright.
  • sinAbs — то же, но отрицательная часть синусоиды отражается (берётся модуль), создавая непрерывный волнообразный эффект.

Примеры

[SLOT_0]
mode = button_runFire
options = numOfLed:60, animMode:rainbow, maxBright:200, refreshRate:30
;включить эффект по нажатию, выключить по отпусканию
crosslink = button_0/event/press:1->led_0/action/enable:1, button_0/event/press:0->led_0/action/enable:0

Лента из 60 светодиодов с эффектом бегущей радуги, яркость ограничена значением 200.

[SLOT_1]
mode = button_runFire
options = numOfLed:30, animMode:sin, effectLen:10, RGBcolor:255 0 0, minBright:20, maxBright:255, increment:3
;переключить эффект по нажатию
crosslink = button_1/event/press:1->led_1/action/toggleLedState:1

Лента из 30 светодиодов с синусоидальным красным эффектом. Период синусоиды — 10 пикселей, плавный переход с приращением 3.

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