ESP-IDF ESP32按键检测(单击、长按、连击)

头文件,bsp_key.h

#define KEY_NUM     2    //按键数量

typedef enum{
    KEY1_RELEASE = 0x00,
    KEY1_LONGCLICKED,
    KEY1_LONGLONG,      
    KEY1_MULTICLICKED_1,
    KEY1_MULTICLICKED_2,
    KEY1_MULTICLICKED_3,
    KEY1_MULTICLICKED_4,
    KEY1_MULTICLICKED_5,
    KEY2_RELEASE,
    KEY2_LONGCLICKED,   
    KEY2_LONGLONG,    
    KEY2_MULTICLICKED_1,
    KEY2_MULTICLICKED_2,
    KEY2_MULTICLICKED_3,
    KEY2_MULTICLICKED_4,
    KEY2_MULTICLICKED_5,
};

#define LONG_PRESS_THRESHOLD 1000   //长长按时间
#define IDLE_COUNT_THRESHOLD 200    //空闲时间
#define CLICK_LONG_THRESHOLD 500    //长按时间
#define CLICK_COUNT_MAX 1500        
#define CONFIRM_COUNT 25            //消抖时间

typedef struct{
    int (*Scan)(void);
    void (*Init)(void);
    uint16_t KeyCnt;
    uint8_t IdleCnt;
    uint8_t ClickCnt;
    uint8_t LongPressed;
    uint8_t State;
}Key_t;

通过修改头文件中的宏定义可以修改按键检测的参数。

源文件,bsp_key.c

定义按键对象

Key_t g_Key_List[KEY_NUM];

初始化代码

/*************************************  USER CODE  *************************************/

/*
*********************************************************************************************************
*	函 数 名: Key1_Scan
*	功能说明: 扫描按键1的状态
*	形    参: 无
*	返 回 值: 按键1的状态
*********************************************************************************************************
*/
static int Key1_Scan(void)
{
    return gpio_get_level(9);
}

/*
*********************************************************************************************************
*	函 数 名: Key2_Scan
*	功能说明: 扫描按键2的状态
*	形    参: 无
*	返 回 值: 按键2的状态
*********************************************************************************************************
*/
static int Key2_Scan(void)
{
    return gpio_get_level(2);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值