32 lines
671 B
C
32 lines
671 B
C
/**
|
|
* @file key.c
|
|
* @brief 单 GPIO 按键控制实现 (低电平有效, 软件消抖)
|
|
*/
|
|
|
|
#include "key.h"
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/task.h"
|
|
|
|
static int s_gpio = -1;
|
|
|
|
void key_init(int gpio)
|
|
{
|
|
s_gpio = gpio;
|
|
|
|
gpio_reset_pin(s_gpio);
|
|
gpio_set_direction(s_gpio, GPIO_MODE_INPUT);
|
|
gpio_set_pull_mode(s_gpio, GPIO_PULLUP_ONLY);
|
|
}
|
|
|
|
bool key_is_pressed(void)
|
|
{
|
|
if (s_gpio < 0) return false;
|
|
|
|
/* 低电平有效 + 简单消抖: 连续两次读到低电平才算按下 */
|
|
if (gpio_get_level(s_gpio) == 0) {
|
|
vTaskDelay(pdMS_TO_TICKS(20));
|
|
return (gpio_get_level(s_gpio) == 0);
|
|
}
|
|
return false;
|
|
}
|