Устраняет дребезг кнопок, отслеживает долгое и короткое нажатие кнопки, можно отследить нажатие нескольких кнопок одновременно. Для корректной работы нужны макросы SET_KEY_READY, RESET_KEY_READY, KEY_READY (Описаны в header-файле). Макрос SND_ON, SND_LONG_ON используется, если у кнопок присутствует звуковой отклик в виде пищалки.
struct Key_TypeDef - структура со свойствами отдельной кнопки key1, key2, key3 и так далее. Она содержит:
- GPIO_TypeDef *GPIOx - указатель на структуру, описывающую порт ввода-вывода (GPIOA, GPIOB, .. );
- uint16_t pin - пин, к которому подключена кнопка;
- uint16_t counter - счетчик времени нажатия;
- uint8_t shortPressID - ID короткого нажатия;
- uint8_t longPressID - ID долгого нажатия;
- struct { uint8_t autorepeat : 1; uint8_t isPressed : 1; } flags - структура с флагами авто повторения при удержании и состояния нажатия кнопки.
struct Keys_Properties - структура с глобальными свойствами кнопки Она содержит:
- uint8_t shortPressDelay - задержка до активации короткого нажатия;
- uint16_t longPressDelay - задержка до активации длинного нажатия;
- uint8_t autorepeatSpeed - скорость авто повторения при удержании изменяется от 0 до 99;
Все тайминги зависят от частоты вызова функции, рекомендуется вызывать ее в прерывании с частотой 1kHz для простых подборов таймингов. При использовании частоты в 1kHz единица в переменной задержки равна одной миллисекунде.
Короткое нажатие активируется при отпускании, то-есть нажал и сразу отпустил. Это сделано для того, чтобы разграничить долгое и короткое нажатие, избавиться от двойного срабатывания.
- *struct Key_TypeDef keyx - указатель на структуру со свойствами отдельной кнопки.
- *struct Keys_Properties keysProperties - указатель на структуру с общими свойствами кнопки.
Устанавливает флаг SET_KEY_READY и keyx.isPressed, обозначающий, что кнопка действительно нажата. Присваивает переменной key_code значение KeyID или longPressID, в зависимости от времени нажатия.
None