[uquote="Demiurg",url="/forum/viewtopic.php?p=4018849#p4018849"]Мой
пример обработки кнопок. Удержание, автоповтор.[/uquote]
Это очень громоздко, а ведь ТС нужна не одна кнопка, а 10 и все желательно с антидребезгом... У меня есть пара классов кнопок, в них можно передать сразу 10 пинов, указать нужны ли длинные нажатия, отпускания или автоповторы, в случае одного из классов это задается для каждой кнопки индивидуально, дополнительно можно указать размер необязательной очереди и таблицу перекодировки, чтобы вместо масок возвращались именно коды кнопок, в случае использования очереди update() можно будет вызывать из прерывания и т.д.... В простейшем случае, без мигания светодиодом, код будет выглядеть так:
Код: Выделить всё
using pins = PinList<PC2, PD7, PD6, PD5, PD4, PD3, PC5, PD2, PD1, PD0>;
Buttons<pins, ButtonMode::ShortOnly, 1> buttons;
PinList<PB7, PB6, PB5, PB4, PB3, PB5, PB2, PB1, PB0> leds;
buttons.init();
leds.init<PinMode::PushPull>();
while(true)
{
buttons.update();
if(buttons.changed())
{
auto state = buttons.state;
leds.write(state.current);
if(state.shortPressed & 0x200) .... // trigger
}
}
Правда он не скомпилируется потому что в списке диодов продублирован PB5, как было в оригинальном коде, и это наверняка ошибка.
Естественно это пример не для TC, но всем остальным есть куда стремиться
