Skip to content

notron124/DebounceAvoid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 

Repository files navigation

Описание

Устраняет дребезг кнопок, отслеживает долгое и короткое нажатие кнопки, можно отследить нажатие нескольких кнопок одновременно. Для корректной работы нужны макросы 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 единица в переменной задержки равна одной миллисекунде.

Короткое нажатие активируется при отпускании, то-есть нажал и сразу отпустил. Это сделано для того, чтобы разграничить долгое и короткое нажатие, избавиться от двойного срабатывания.

Input

  • *struct Key_TypeDef keyx - указатель на структуру со свойствами отдельной кнопки.
  • *struct Keys_Properties keysProperties - указатель на структуру с общими свойствами кнопки.

Output

Устанавливает флаг SET_KEY_READY и keyx.isPressed, обозначающий, что кнопка действительно нажата. Присваивает переменной key_code значение KeyID или longPressID, в зависимости от времени нажатия.

Return

None

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published