[SLOT_n]
mode = buttonMatrix

Программный модуль матрицы кнопок: сканирует сетку «выходы × входы» и рапортует символ нажатой клетки.

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

Матрица занимает несколько слотов: слоты-выходы перечисляются в опции outSlots, слоты-входы — в inSlots. Сам модуль объявляется в одном слоте и управляет остальными; в остальных слотах mode не задаётся.

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

Каждый слот даёт матрице три линии. Модуль поочерёдно подаёт уровень на линии слотов-выходов (строки) и опрашивает линии слотов-входов (столбцы). Пересечение активной строки и сработавшего столбца — клетка матрицы; её символ берётся из строки mapping и рапортуется событием key в момент нажатия. Отпускание не рапортуется; при нескольких нажатых клетках рапортуется каждая.

Размер матрицы — 3 × outSlots строк на 3 × inSlots столбцов, длина mapping равна 9 × outSlots × inSlots. Порядок символов построчный: сначала три столбца первого входного слота для первой линии первого выходного слота, затем для второй линии и так далее. Если mapping не задан, клетки нумеруются символами az, затем AZ.

Дребезг подавляется счётчиком: уровень должен продержаться debounceCount сканов подряд; частота сканирования — refreshRate.

Топики

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

  • <deviceName>/buttonMatrix_<slot> — например moduleBox/buttonMatrix_0

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

Опции

Доступные опции:

  • outSlotsстрока, слоты-выходы матрицы (строки) через пробел. По умолчанию — слот самого модуля.
  • inSlotsстрока, слоты-входы матрицы (столбцы) через пробел. По умолчанию — следующий слот.
  • mappingстрока, символы клеток подряд без пробелов, длина 9 × outSlots × inSlots. По умолчанию az, затем AZ.
  • debounceCountчисло(int), глубина антидребезга в сканах — сколько сканов подряд уровень должен держаться для подтверждения. Диапазон 1–64. По умолчанию 3.
  • refreshRateчисло(int), частота сканирования матрицы, . Диапазон 1–100. По умолчанию 100.

События

ТопикPayloadОписание
buttonMatrix_<slot>/event/keyстрокаСимвол нажатой клетки матрицы из таблицы mapping

Пример: топик moduleBox/buttonMatrix_0/event/key, payload 5.

Пример подключения

Матрица 3×3: каждая кнопка — нормально разомкнутый контакт между своей строкой и своим столбцом. Строки (row0row2) подключаются к каналам ch_0ch_2 модуля 3n_mosfet в слоте 0, столбцы (col0col2) — к каналам ch_0ch_2 модуля in_3ch в слоте 1. Перекрестья строк и столбцов между собой не соединены. Символ клетки — mapping[3·row + col]: при mapping:123456789 строка row0 даёт 1 2 3, row14 5 6, row27 8 9.

Примеры

[SLOT_0]
mode = buttonMatrix
options = outSlots:0, inSlots:1, mapping:123456789
;нажатие клетки '1' запускает трек 0
crosslink = buttonMatrix_0/event/key:1->player_0/action/play:0

Матрица 3×3 на двух слотах: 3n_mosfet в слоте 0 — строки, in_3ch в слоте 1 — столбцы. Клетки обозначены цифрами 19.

[SLOT_0]
mode = buttonMatrix
options = outSlots:0 1, inSlots:2 3, debounceCount:5
;набранные символы собираются в строку коллектором
crosslink = buttonMatrix_0/event/key:@->collector_6/action/add:@

Матрица 6×6 (36 клеток) на четырёх слотах — два 3n_mosfet и два in_3ch, символы по умолчанию az, AJ; усиленный антидребезг. Символы уходят в collector, который собирает из них строку — например код доступа.

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