Files
stc32g128k/Docs/walkthrough.md

62 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# STC32G 手环项目工程与功能实现 Walkthrough
本项目完成了手环核心交互逻辑与状态机的全部实现。所有代码已完全用中文进行行级注释,且在 Keil C251 下编译成功0 Errors
## 实现功能摘要
1. **自适应射频解码兼容性**
* 重构为**基于电平比例的自适应解码算法**。放宽绝对微秒窗口限制高电平50~2500us低电平1500~60000us通过低/高电平比例15~48倍基准为31倍自动识别 EV1527 帧并解析数据。
* 优化串口调试输出,避免大量多行打印造成的 CPU 阻塞。
2. **严格匹配要求的按键与事件交互逻辑**
* **进入配对菜单**:在待机模式下,同时长按 `▲`(上键)+ `▼`(下键) 3秒进入传感器类型选择菜单无震动与LED闪烁保持菜单展示
* **进入对码搜索 (Pair Wait)**:在菜单中选择好类型后,短按 `SOS` 确认,此时触发 1 次 100ms 短振确认,且 LED 开启白色快闪3Hz进入雷达扫描信号接收。
* **主动呼救 (Emit SOS)**:在待机模式下,短按 `SOS` 键,立刻切入求救模式并开始向外循环发射 433MHz 警报信号。
* **IPC 对码绑定**:在待机模式下,长按 `SOS` 键 5秒显示 BINDING IPC 页面,向外发射 1 次 433MHz 绑定信号(数据码为 0x01维持 2 秒后自动返回待机。
* **解除求救模式**在求救模式下长按任意一个按键UP、DOWN 或 SOS即可主动解除警报退回时钟待机。
3. **不接收/解析他人 SOS 广播**
* 手环只对已经配对存储在内部数据库门磁、PIR、烟感、燃气、水浸的传感器 ID 触发报警。
* 防区轮询解码时严格过滤并排除 SOS 信号的被动接收,防止被其他设备的 SOS 广播误触发。
4. **各传感器特定声光电反射与对码状态**
* **对码流程**
* 对码中LED 维持 **白色快闪 (3Hz)**R+G+B 全开闪烁)。
* 对码成功:屏幕显示 PAIR SUCCESS触发 **强力长振 1 次 (400ms)**,并且 LED **绿色常亮 2 秒**
* 对码失败/超时:双击快速短振 (100ms + 100ms)LED **红色快闪 3 次**
* **传感器报警触发模式** (5秒循环周期)
* **门磁**LED 红色常亮,马达 1 次短振 300ms。
* **PIR 人体感应**LED 黄色R+G 混色),马达 2 次短振 300ms (间隔 200ms)。
* **烟雾**LED 绿色,马达 3 次短振 200ms (间隔 150ms)。
* **气体**LED 紫色R+B 混色),马达 4 次短振 200ms (间隔 100ms)。
* **水浸**LED 黄色R+G 混色),马达 2 次长振 600ms (间隔 300ms)。
* **手环主动 SOS 求救模式**
* LED **红色极速闪烁 (5Hz)**
* 马达 **持续 1200ms 循环长振** (振动 1000ms静止 200ms 循环)。
5. **电池百分号显示修复与坐标复原**
* **字模基线对齐**:将 `%` 字符0x25的字模数据在 8x16 矩阵中向上平移 2 像素,使其与前面的数字处于同一水平基准线。
* **坐标优化防重合**:将电池图标右移至 `X=92, Y=27`,电量百分比置于 `X=62, Y=24`。二者之间保留 6 像素间距,既美观又完美杜绝了贴合与重叠问题。
6. **对码捕获卡顿 Bug 修复**
* 修复了 `while(1)` 循环开头无条件执行 `state_changed = 0` 导致在 Section 4 异步检测到射频匹配信号跳入 `STATE_PAIR_CONFIRM` 后重绘标记被强行抹除、屏幕始终卡死在搜索雷达页面的 Bug。现在已改在重绘判定内部重置检测到对码信号即可瞬间跳转至“捕获成功”确认页。
## 仿真模式扩展说明
为了支持无物理元件调试,串口输入指令集已同步扩展:
* **模拟组合按键**:串口发送 **`c`** 字符,模拟同时长按 `▲` + `▼` 按键 3 秒进入配对菜单。
* **模拟确认搜索**:在菜单页下发送 **`s`**,模拟按下 SOS 键,触发 100ms 短振与白灯快闪,进入对码搜索(雷达显示)。
* **模拟按键解除**:在求救模式下,发送 **`U`**、**`D`** 或 **`S`**(代表长按按键),即可解除 SOS 并退回时钟。
* **模拟切换系统布防状态**(用于测试普通防区的触发):
* 发送 **`1`**:强制系统进入 **NORMAL** 撤防/常态模式(门磁/PIR 触发时会被忽略,烟感/水浸/燃气仍可触发)。
* 发送 **`2`**:强制系统进入 **ARMED** 布防模式(门磁/PIR 此时被触发会立刻报警)。
* 发送 **`3`**:强制系统进入 **DISARMED** 撤防模式。
## 编译结果
* **编译器**Keil C251 V5.60.0.0
* **编译输出目标**`Build\wristband.hex`
* **Errors**0
* **Warnings**2
* **Program Size**data=104.1, edata+hdata=351, xdata=352, const=1395, code=13552