Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ***********************************************************
- // button.c
- // Работа с кнопкой
- //
- // ***********************************************************
- #include "button.h"
- #include "../drivers.h"
- // Задержка между нажатиями при зажатой кнопке
- #define DEFAULT_COUNTDOWN 30
- // Кнопка прицеплена на ногу PA0
- static const TPort ButtonPort = PORTA;
- static const int ButtonPin = 0;
- static int Countdown = 0;
- static void (* button_Handler)(uint8_t Button);
- // Опрос ножки, частота 100 Гц
- static void button_onTimer(void)
- {
- if(gpio_Value(ButtonPort, ButtonPin))
- {
- // Если нажатие зафиксировано, то считаем
- if(Countdown)
- {
- Countdown--;
- }
- else
- {
- // Задержка перед вторым нажатием
- Countdown = DEFAULT_COUNTDOWN;
- // Если есть обработчик - вызовем его
- // Кнопка всего одна - передаём 0
- if(button_Handler) button_Handler(0);
- }
- }
- else
- {
- // Первое нажатие фиксируется сразу
- Countdown = 0;
- }
- }
- // Инициализация драйвера кнопки
- void button_Init(void)
- {
- // Вывод в режиме входа
- gpio_DigitalInput(ButtonPort, ButtonPin);
- // Запустим процесс опроса кнопки
- timer_AddFunction(100, &button_onTimer);
- // Счётчик, нажатия фиксируются только когда он 0
- Countdown = 0;
- }
- // Установить обработчик нажатия
- // void Handler(uint8_t Button);
- void button_SetHandler(void * Handler)
- {
- button_Handler = (void(*)(uint8_t))Handler;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement