docs: 根据1.14寸屏幕、5按键与可编程RGB新规格更新项目文档
This commit is contained in:
@@ -1,15 +1,18 @@
|
||||
# 模块拆分 - 按键扫描与事件判定 (docs/50_module-breakdown/mod-key.md)
|
||||
# 模块拆分 - 按键扫描与事件判定 (Docs/50_module-breakdown/mod-key.md)
|
||||
|
||||
本模块描述按键状态消抖、长按计时判定以及组合按键识别。
|
||||
本模块描述按键状态消抖、长按计时判定以及组合按键识别。支持 5 个物理按键到手环事件的映射。
|
||||
|
||||
## 1. 模块职责说明
|
||||
|
||||
* **职责范围**:
|
||||
1. 在 1ms 定时器中断中建立 10ms 扫描计时周期。
|
||||
2. 对三个物理按键(KEY_UP SW1, KEY_SOS SW3, KEY_DOWN SW2)进行状态扫描。
|
||||
2. 对 5 个物理按键进行引脚电平扫描:
|
||||
* 侧边:`KEY_UP` SW1 (▲), `KEY_DOWN` SW2 (▼), `KEY_CONFIRM` (■)
|
||||
* 上部:`KEY_SOS1` (SOS 1), `KEY_SOS2` (SOS 2)
|
||||
3. 实现消抖检测(连续 20ms 检测到电平稳定才认定按键动作)。
|
||||
4. 对按住不放的行为进行计时累加,判定长按(如长按 SOS 达 5 秒触发对码;长按 ▲+▼ 达 3 秒触发配对模式)。
|
||||
5. 将按键判定结果转换为 `KeyEvent` 枚举,并注入按键事件缓冲区 `key_event_buf` 供主循环异步读取。
|
||||
4. 对上部双 SOS 按键进行逻辑并联处理,保证按下任意一个均能触发求救。
|
||||
5. 对按住不放的行为进行计时累加,判定长按(如长按 SOS 达 5 秒触发对码;长按 ▲+▼ 达 3 秒触发配对模式)。
|
||||
6. 将按键判定结果转换为 `KeyEvent` 并注入按键事件缓冲区 `key_event_buf`。
|
||||
|
||||
## 2. 数据结构定义
|
||||
|
||||
@@ -21,9 +24,10 @@ typedef enum {
|
||||
KEY_UP_LONG,
|
||||
KEY_DOWN_SHORT,
|
||||
KEY_DOWN_LONG,
|
||||
KEY_SOS_SHORT,
|
||||
KEY_SOS_LONG,
|
||||
KEY_COMB_LONG // ▲ + ▼ 组合长按事件
|
||||
KEY_CONFIRM_CLICK, // ■ 确认键短按
|
||||
KEY_SOS_SHORT, // SOS键短按 (SOS1 或 SOS2)
|
||||
KEY_SOS_LONG, // SOS键长按(5秒) (SOS1 或 SOS2)
|
||||
KEY_COMB_LONG // ▲ + ▼ 组合长按事件
|
||||
} KeyEvent;
|
||||
```
|
||||
|
||||
@@ -31,9 +35,11 @@ typedef enum {
|
||||
|
||||
* `void Key_Scan_Process(void)`:
|
||||
在 Timer 1 ISR 中每 10ms 调度一次。
|
||||
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_SOS` 的 GPIO 逻辑电平。
|
||||
* 读取 `KEY_UP`, `KEY_DOWN`, `KEY_CONFIRM`, `KEY_SOS1`, `KEY_SOS2` 的 GPIO 逻辑电平。
|
||||
* 计算并联 SOS 状态:`is_sos_pressed = (KEY_SOS1 == 0) || (KEY_SOS2 == 0)`。
|
||||
* 如果发现按键电平状态改变,进行计数消抖。
|
||||
* 如果按住不放,累加计时计数器(`key_up_hold`, `key_down_hold`, `key_sos_hold`)。
|
||||
* 如果按住不放,累加计时计数器(`key_up_hold`, `key_down_hold`, `key_confirm_hold`, `key_sos_hold`)。
|
||||
* 检测到 `key_up_hold >= 300` 且 `key_down_hold >= 300` 达 3 秒时,注入 `KEY_COMB_LONG` 事件。
|
||||
* 检测到 `key_sos_hold >= 500` 达 5 秒时,注入 `KEY_SOS_LONG` 事件;若释放时未达 5 秒但大于 20ms,注入 `KEY_SOS_SHORT`。
|
||||
* 检测到确认键释放,注入 `KEY_CONFIRM_CLICK`。
|
||||
* 事件解析完毕后存入 `key_event_buf`。
|
||||
|
||||
Reference in New Issue
Block a user