[SLOT_n]
mode = buttonMatrixПрограммный модуль матрицы кнопок: сканирует сетку «выходы × входы» и рапортует символ нажатой клетки.
Совместимость
- Модуль три силовых MOSFET-ключа — слоты-выходы (строки)
- Модуль три цифровых входа — слоты-входы (столбцы)
Матрица занимает несколько слотов: слоты-выходы перечисляются в опции
outSlots, слоты-входы — в inSlots. Сам модуль объявляется в одном
слоте и управляет остальными; в остальных слотах mode не задаётся.
Принцип работы
Каждый слот даёт матрице три линии. Модуль поочерёдно подаёт уровень на
линии слотов-выходов (строки) и опрашивает линии слотов-входов (столбцы).
Пересечение активной строки и сработавшего столбца — клетка матрицы; её символ
берётся из строки mapping и рапортуется событием key в момент нажатия.
Отпускание не рапортуется; при нескольких нажатых клетках рапортуется каждая.
Размер матрицы — 3 × outSlots строк на 3 × inSlots столбцов, длина
mapping равна 9 × outSlots × inSlots. Порядок символов построчный:
сначала три столбца первого входного слота для первой линии первого
выходного слота, затем для второй линии и так далее. Если mapping не
задан, клетки нумеруются символами a–z, затем A–Z.
Дребезг подавляется счётчиком: уровень должен продержаться debounceCount сканов подряд; частота сканирования — refreshRate.
Топики
База топика события:
<deviceName>/buttonMatrix_<slot>— напримерmoduleBox/buttonMatrix_0
Полный топик — база плюс направление и имя: moduleBox/buttonMatrix_0/event/key.
Опции
Доступные опции:
- outSlots — строка, слоты-выходы матрицы (строки) через пробел. По умолчанию — слот самого модуля.
- inSlots — строка, слоты-входы матрицы (столбцы) через пробел. По умолчанию — следующий слот.
- mapping — строка, символы клеток подряд без пробелов, длина
9 × outSlots × inSlots. По умолчаниюa–z, затемA–Z. - 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: каждая кнопка — нормально разомкнутый контакт между своей
строкой и своим столбцом. Строки (row0–row2) подключаются к каналам
ch_0–ch_2 модуля 3n_mosfet в слоте 0, столбцы (col0–col2) — к
каналам ch_0–ch_2 модуля in_3ch в слоте 1. Перекрестья строк и столбцов
между собой не соединены. Символ клетки — mapping[3·row + col]: при
mapping:123456789 строка row0 даёт 1 2 3, row1 — 4 5 6, row2 —
7 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 —
столбцы. Клетки обозначены цифрами 1–9.
[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,
символы по умолчанию a–z,
A–J; усиленный антидребезг. Символы уходят в
collector, который
собирает из них строку — например код доступа.
Подробнее — внутренние связи (crossLink).