## 主要修改
### 1. MQTT setMode命令处理修复 - 添加Set_System_Mode函数extern声明,解决编译错误 - 将setMode处理逻辑移到control主题,符合小程序规范 - 完善Set_System_Mode函数,添加音频播放功能 ### 2. 按键4手动补水功能 - 实现key4_single_click_handler函数,添加手动补水逻辑 - 与按键2喂食逻辑保持一致:相同的模式检查和错误处理 - 提供完整的本地手动控制功能 ### 3. 系统优化 - 统一本地和远程控制逻辑 - 完善错误处理和用户反馈 - 优化代码结构和日志记录 ## 影响 - 系统现在支持完整的双重控制方式(本地按键+远程MQTT) - 所有按键功能完善:模式切换、手动喂食、页面切换、手动补水 - 编译无错误,代码结构清晰,便于维护
This commit is contained in:
172
README.md
172
README.md
@@ -75,4 +75,174 @@
|
||||
- `SYS_ERROR_ALARM` (20): 系统检测到异常,请检查硬件模块
|
||||
|
||||
### 使用说明:
|
||||
系统通过调用相应的音频索引值来播放对应的提示音,为用户提供直观的听觉反馈,增强用户体验。
|
||||
系统通过调用相应的音频索引值来播放对应的提示音,为用户提供直观的听觉反馈,增强用户体验。
|
||||
|
||||
## FreeRTOS任务架构与系统功能
|
||||
|
||||
### 系统概述
|
||||
本智能宠物喂食器系统基于FreeRTOS实时操作系统,采用多任务架构实现模块化功能。系统包含6个主要任务,分别负责不同的功能模块。
|
||||
|
||||
### 任务列表与优先级
|
||||
| 任务名称 | 堆栈大小 | 优先级 | 功能描述 |
|
||||
|----------|----------|--------|----------|
|
||||
| defaultTask | 256*4字节 | High1 | 系统默认任务,负责初始化核心组件(LED、日志、RTC、MP3) |
|
||||
| wifi_mqtt | 3000*4字节 | High | WiFi和MQTT通信任务,负责网络连接和数据传输 |
|
||||
| LCD_SHOW_Task | 1024*4字节 | High | LCD显示任务,负责显示系统状态和信息 |
|
||||
| button | 512*4字节 | Realtime2 | 按钮处理任务,负责检测和处理按键输入 |
|
||||
| sensor | 1024*4字节 | Normal | 传感器数据采集任务,负责读取温湿度和重量数据 |
|
||||
| step_motor | 512*4字节 | Normal | 步进电机控制任务,负责执行喂食操作 |
|
||||
|
||||
### 主要数据结构
|
||||
|
||||
#### LCD页面枚举 (LCD_Page_t)
|
||||
```c
|
||||
typedef enum {
|
||||
LCD_PAGE_TIME = 0, // 时间显示页面
|
||||
LCD_PAGE_TEMP_HUMI, // 温湿度页面
|
||||
LCD_PAGE_FOOD_WEIGHT, // 食物重量页面
|
||||
LCD_PAGE_WATER_LEVEL, // 水位页面
|
||||
LCD_PAGE_SYSTEM_STATUS // 系统状态页面
|
||||
} LCD_Page_t;
|
||||
```
|
||||
|
||||
#### 传感器数据结构体 (Sensor_Data_t)
|
||||
```c
|
||||
typedef struct {
|
||||
float temperature; // 温度值
|
||||
float humidity; // 湿度值
|
||||
float food_weight; // 食物重量
|
||||
uint8_t water_level; // 水位状态 (0=无水, 1=有水)
|
||||
uint8_t system_mode; // 系统模式 (0=手动, 1=自动)
|
||||
} Sensor_Data_t;
|
||||
```
|
||||
|
||||
#### 喂食控制命令枚举 (Feed_Cmd_t)
|
||||
```c
|
||||
typedef enum {
|
||||
FEED_CMD_NONE = 0, // 无命令
|
||||
FEED_CMD_MANUAL, // 手动喂食
|
||||
FEED_CMD_AUTO, // 自动喂食
|
||||
FEED_CMD_REMOTE, // 远程喂食
|
||||
FEED_CMD_TEST // 测试喂食
|
||||
} Feed_Cmd_t;
|
||||
```
|
||||
|
||||
### 全局变量
|
||||
- `current_page`: 当前LCD显示页面
|
||||
- `sensor_data`: 传感器数据
|
||||
- `lcd_force_refresh`: 强制刷新标志(RTC更新时设置)
|
||||
- `system_mode`: 系统模式(1=自动模式,0=手动模式)
|
||||
- `feeding_in_progress`: 喂食进行中标志
|
||||
- `feed_command`: 喂食命令标志
|
||||
- `feed_angle`: 喂食角度(默认90度)
|
||||
- `feed_amount`: 喂食份数
|
||||
|
||||
### 各任务详细功能
|
||||
|
||||
#### 1. defaultTask (默认任务)
|
||||
- 初始化运行LED
|
||||
- 初始化日志系统 (easylogger)
|
||||
- 初始化RTC管理模块
|
||||
- 初始化MP3模块并播放系统启动音
|
||||
- 主循环:闪烁运行LED(1秒开,1秒关)
|
||||
|
||||
#### 2. LCD_SHOW_Task (LCD显示任务)
|
||||
- 显示5个不同页面:
|
||||
1. **时间页面**: 显示当前时间和日期
|
||||
2. **温湿度页面**: 显示温度和湿度值
|
||||
3. **食物重量页面**: 显示食物重量和状态(LOW/MEDIUM/GOOD)
|
||||
4. **水位页面**: 显示水位状态(NO WATER/WATER OK)
|
||||
5. **系统状态页面**: 显示MQTT连接状态、系统模式、喂食状态
|
||||
- 刷新策略:
|
||||
- 时间页面和系统状态页面:每30秒刷新
|
||||
- 其他页面:每2秒刷新
|
||||
- 支持RTC时间更新回调,时间更新时立即刷新显示
|
||||
|
||||
#### 3. sensorTask (传感器任务)
|
||||
- HX711称重传感器校准(零点校准)
|
||||
- AHT30温湿度传感器初始化
|
||||
- 循环读取温湿度数据(每2秒一次)
|
||||
- 循环读取食物重量数据(每2秒一次)
|
||||
- 更新全局传感器数据结构
|
||||
|
||||
#### 4. button_task (按钮任务)
|
||||
- 初始化6个按钮/传感器:
|
||||
1. KEY1: 模式切换(自动/手动)
|
||||
2. KEY2: 手动喂食(仅手动模式有效)
|
||||
3. KEY3: 切换显示界面
|
||||
4. KEY4: 长按设置时间
|
||||
5. M3_IO: 水位传感器
|
||||
6. HC_SR505: 人体存在传感器
|
||||
- 主循环:每5ms检测一次按钮状态
|
||||
|
||||
#### 5. step_motor_task (步进电机任务)
|
||||
- 初始化步进电机
|
||||
- 检查喂食命令队列
|
||||
- 执行喂食操作:
|
||||
- 根据命令类型播放相应音频
|
||||
- 控制步进电机旋转指定角度和份数
|
||||
- 等待食物落下(3秒)
|
||||
- 停止电机并播放完成音效
|
||||
|
||||
#### 6. wifi_task_mqtt (WiFi和MQTT任务)
|
||||
- 在外部文件中实现
|
||||
- 负责WiFi连接和MQTT通信
|
||||
- 处理远程控制指令
|
||||
|
||||
### 按键功能说明
|
||||
| 按键 | 功能 | 说明 |
|
||||
|------|------|------|
|
||||
| KEY1 | 模式切换 | 单击切换自动/手动模式,播放相应音效 |
|
||||
| KEY2 | 手动喂食 | 仅在手动模式下有效,触发90度单份喂食 |
|
||||
| KEY3 | 显示切换 | 单击切换到下一个LCD页面 |
|
||||
| KEY4 | 时间设置 | 长按进入时间设置模式(待实现) |
|
||||
| M3_IO | 水位检测 | 检测水位状态,更新传感器数据 |
|
||||
| HC_SR505 | 人体存在 | 检测人体接近(待实现更多功能) |
|
||||
|
||||
### 喂食控制流程
|
||||
1. **请求阶段**: 通过`Request_Feed()`函数提交喂食请求
|
||||
2. **命令传递**: 设置全局变量`feed_command`, `feed_angle`, `feed_amount`
|
||||
3. **执行阶段**: `step_motor_task`检测到命令后调用`Execute_Feed()`
|
||||
4. **动作执行**:
|
||||
- 播放相应音频提示
|
||||
- 步进电机旋转指定角度和份数
|
||||
- 等待食物落下
|
||||
- 播放完成音效
|
||||
5. **状态恢复**: 清除喂食进行中标志
|
||||
|
||||
### LCD页面刷新策略
|
||||
- **时间页面**和**系统状态页面**: 每30秒刷新,但每100ms检查一次页面切换
|
||||
- **其他页面**: 每2秒刷新
|
||||
- **强制刷新**: RTC时间更新时立即刷新显示
|
||||
|
||||
### 系统模式
|
||||
- **自动模式 (system_mode=1)**: 系统根据预设规则自动执行喂食
|
||||
- **手动模式 (system_mode=0)**: 用户通过按键或远程控制手动触发喂食
|
||||
|
||||
### 音频反馈系统
|
||||
系统通过MP3模块提供丰富的音频反馈,包括:
|
||||
- 系统启动音
|
||||
- 模式切换提示
|
||||
- 喂食开始和完成提示
|
||||
- 错误报警音
|
||||
- 远程控制接收提示
|
||||
|
||||
### 数据流
|
||||
```
|
||||
传感器采集 → sensor_data更新 → LCD显示更新 → 用户查看
|
||||
按键输入 → 模式/喂食控制 → 状态更新 → LCD/音频反馈
|
||||
远程指令 → MQTT接收 → 喂食控制 → 执行反馈
|
||||
```
|
||||
|
||||
### 扩展接口
|
||||
- `Request_Feed()`: 外部请求喂食接口
|
||||
- `Get_System_Mode()`: 获取当前系统模式
|
||||
- `Set_System_Mode()`: 设置系统模式
|
||||
- `LCD_UpdateSensorData()`: 更新传感器数据
|
||||
- `LCD_GetSensorData()`: 获取传感器数据指针
|
||||
|
||||
### 注意事项
|
||||
1. HX711称重传感器首次使用时需要执行校准流程
|
||||
2. 喂食过程中不接受新的喂食请求
|
||||
3. 手动喂食仅在手动模式下有效
|
||||
4. RTC时间通过网络同步,网络断开时使用本地RTC时间
|
||||
Reference in New Issue
Block a user