# combo_multiButton **Repository Path**: breyun/combo_multi-button ## Basic Information - **Project Name**: combo_multiButton - **Description**: 在multiButton基础上添加了组合按键检测的功能 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2025-03-19 - **Last Updated**: 2025-03-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 简介 基于multi_button([multi_button GitHub](https://github.com/0x1abin/MultiButton)、[multi_button GitCode](https://gitcode.com/gh_mirrors/mu/MultiButton)) 1.新增组合短按、组合长按检测。 | 事件 | 说明 | | ---------------- | -------- | | COMBO_SHORT_DOWN | 组合短按 | | COMBO_LONG_DOWN | 组合长按 | 只能检测两个按键的组合。 发生组合按键时,同时记录组合中另一个按键的id 参与组合按键的id需小于32 新增API:button_mount_combo(...)用以挂载按键的组合 2.调整长按保持事件的触发频率 以前每个ticks都会触发一次长按保持事件,太频繁了。将长按触发事件修改为变量,初始值为LONG_HOLD_MAX_TICKS,表示每100ms触发一次长按保持事件,此值每1s减小10ms,最小为LONG_HOLD_MIN_TICKS ```c #define LONG_HOLD_MAX_TICKS (100 / TICKS_INTERVAL) // 长按中的最长触发间隔,100ms #define LONG_HOLD_MIN_TICKS (30 / TICKS_INTERVAL) // 长按中的最短触发间隔,30ms ``` # 使用方法 不再介绍multi_button的使用方法,仅对组合按键的使用做介绍 1.申请组合按键结构体。此结构体必须是静态的 ```c ComboButtonId_T button_SET_combo[] = { //{当前按键id,组合短按id,组合长按id},BUTTON_MAX_NUMBER表示不检测 {SET_KEY, RST_KEY, BUTTON_MAX_NUMBER}, {SET_KEY, MID_KEY, MID_KEY}, {SET_KEY, RHT_KEY, RHT_KEY}, {SET_KEY, LFT_KEY, LFT_KEY}, {SET_KEY, DWN_KEY, DWN_KEY}, {SET_KEY, UP_KEY, UP_KEY}, }; ``` 2.``按键对象初始化后,``将组合按键结构体挂载到按键对象种种。 ```c button_mount_combo(&button_object[SET_KEY], button_SET_combo, sizeof(button_SET_combo)/sizeof(button_SET_combo[0])); ``` 3.检测到组合按键事件后,在按键对象中记录了另一按键的id ```c typedef struct Button { ... ComboButtonId_T *pCombo; // 挂载的组合按键 uint8_t combo_len; // 数组长度 uint8_t match_combo_short_id; // 组合短按时另一个按键的id uint8_t match_combo_long_id; // 组合长按时另一个按键的id ... } Button; ``` # 效果 ## 组合检测 uwTick为sysTime的计数值,1uwTick=1ms ![组合检测](./document/combo_detection.png) ## 动态调整长按保持的触发频率 ![动态调整长按保持的触发频率](./document/dynamic_frequency_adjustment_in_press_hold.png) # 示例说明 ## 硬件环境 核心板:STM32F103C8T6 调试器:CMSIS-DAP 按键模块:五向摇杆按键 ![五向摇杆按键](./document/button_mode.png) 引脚连接 COM------>3.3V UP------>PB9 DWN------>PB8 LFT------>PB7 RHT------>PB6 MID------>PB5 SET------>PB4 RST------>PB3 ## 开发环境 为显示方便,添加button_fifo.c文件 GCC:vscode为编辑器,GCC为编译器,cmake构建编译,openocd为调试器 MDK:V5.41、AC6编译器