shonty писал(а):до 255 кнопок......
это уже пианино получится
Музикальную школу нельзя обмануть)) У пианины 88 кнопок (иногда 85)...
Мне что то подсказывает, что у каждого программиста-эмбеддера в чулане есть готовые библиотеки/заготовки.
У кого то
круги на суперАсме, у кого то блокирующие функции, у кого то событийная модель на прерываниях...
У меня базовая функция антидребезга использует 1 байт на кнопку, режим "гистерезисный счетчик" - тут ранее писала.
Событийное расширение использует:
- 1 байт на индивидуальный конфиг либо идет общий конфиг на все кнопки одним дефайном
- 1 или 2 байта на счетчик для автоповтора/длинного нажатия (зависит от времени длинного нажатия/повтора и от частоты опроса, настраивается typedef-ом).
Это все дергается по таймеру (обычно по железному, который сисклок еще делает)
В основную программу "торчит" какой то getEvent, который отдает события (в зависимости от конфига) нажатие, отпускание, длинное нажатие, повтор нажатия, поворот энкодера.
Для энкодера там отдельный обработчик, опрашивает стразу три физических сигнала - 2 фазы и кнопку энкодера. И отдельная переменная - число щелчков энкодера и направление.