更新了Todo Lists,规范UI绘制任务的命名和底层接口

This commit is contained in:
NeoZng 2023-06-15 12:19:32 +08:00
parent 0eec5d762b
commit c9564936ef
9 changed files with 192 additions and 260 deletions

View File

@ -131,9 +131,5 @@ void StartDefaultTask(void const *argument)
/* Private application code --------------------------------------------------*/ /* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */ /* USER CODE BEGIN Application */
/**
* @brief ??,???????,
* ??????????applicatoin/robot_task.h???
*
*/
/* USER CODE END Application */ /* USER CODE END Application */

83
TODO.md
View File

@ -24,21 +24,9 @@
### 待添加 ### 待添加
#### bsp_spi
- [x] 待测试BMI088预计1.20前完成)
#### bsp_iic #### bsp_iic
- [x] 待测试OLEDIST8310预计1.20前完成) - [ ] 添加10位地址的支持
#### bsp_gpio
- [x] 增加GPIO引脚的控制有待商榷是否需要单独添加HAL实际上已经提供较好的封装
#### bsp_usb
- [ ] 增加usb的支持用于虚拟串口或和PC进行高速通信
#### bsp_blueteetch #### bsp_blueteetch
@ -48,24 +36,12 @@
- [ ] 增加无线网络功能,方便调试和测试 - [ ] 增加无线网络功能,方便调试和测试
#### bsp_log
- [ ] 在vscode中添加rtt viewer的查看窗口提供一键启用的task.json
--- ---
## Module ## Module
### 待完成 ### 待完成
- [ ] 给所有模块增加Daemon 模块以提供离线和异常检测
- [ ] 为键鼠/遥控器/ps手柄/视觉上位机等各种控制器提供一套统一的接口,把发来数据转化为标准的控制数据,包括底盘速度云台角度等等 - [ ] 为键鼠/遥控器/ps手柄/视觉上位机等各种控制器提供一套统一的接口,把发来数据转化为标准的控制数据,包括底盘速度云台角度等等
- [ ] 给每个模块增加调试的条件编译并增加bsp log的输出。或直接在运行时添加log等级输出不同的信息。 - [ ] 给每个模块增加调试的条件编译并增加bsp log的输出。或直接在运行时添加log等级输出不同的信息。
@ -84,13 +60,7 @@
#### imu #### imu
- [x] 增加角速度的反馈,并且能够获取加速度值(目前看来修改反馈数据类型定义即可) - [ ] 完善bmi088模块和算法的交互添加异步量测更新的SO3上的IEKF
#### refereeUI
- [x] 提供UI绘制封装
- [x] 绘制电容剩余容量/当前底盘状态/当前云台状态/底盘位置/射表
- [ ] 绘制视觉识别UI/识别状态/击打状态
#### ==master_machine== #### ==master_machine==
@ -118,21 +88,17 @@
#### BMI088 #### BMI088
需要重写部分数据结构并在bsp_spi完成之后移植到新的bsp上。等待bsp_spi的测试 - [ ] 完善和SO3 IEKF的交互增加异步任务的唤醒和数据传递IMU中断唤起任务
- [x] 重构imu模块
#### remote_control #### remote_control
- [x] 将键盘数据解析替换为位域操作(已完成,待测试) - [ ] 增加长按/短按检测
#### referee
- [ ] 优化三个裁判系统模块的组织关系
#### message_center #### message_center
- [ ] 增加队列剩余信息和数据时间戳的支持 - [ ] 增加队列剩余信息和数据时间戳的支持
- [ ] 增加数据为空的处理
- [ ] 提供直接传递指针的接口?
#### can_comm #### can_comm
@ -140,7 +106,6 @@
#### controller #### controller
- [x] 增加前馈数据
- [ ] 将PID的初始化改写为PIDRegister的形式,在controller统一分配内存. - [ ] 将PID的初始化改写为PIDRegister的形式,在controller统一分配内存.
#### user_lib #### user_lib
@ -151,7 +116,6 @@
- [ ] 增加3508和2006的开环零位校准函数 - [ ] 增加3508和2006的开环零位校准函数
- [ ] 为实例增加低通滤波系数变量,使不同电机有不同的配置 - [ ] 为实例增加低通滤波系数变量,使不同电机有不同的配置
- [ ] 正反转标志位设置,需要修改反馈量和pid计算
#### LKmotor #### LKmotor
@ -173,7 +137,7 @@
#### referee_communication #### referee_communication
- [x] 增加裁判系统多机通信功能 - [ ] 增加裁判系统多机通信功能
#### controller #### controller
@ -184,48 +148,25 @@
- [ ] 通过bsp_pwm添加支持 - [ ] 通过bsp_pwm添加支持
--- ---
## APP ## APP
### 待完成 ### 待完成
#### all app
- [ ] 增加调试的条件编译,使得在没有连接其他应用时也可以假装有那些应用而正常调试运行 - [ ] 增加调试的条件编译,使得在没有连接其他应用时也可以假装有那些应用而正常调试运行
#### ==robot_cmd==
- [ ] 键鼠控制
- [x] 双板兼容(待测试)
#### ==chassis==
- [ ] 根据裁判系统的功率数据和超级电容,进行输出限幅
- [x] 双板兼容(待测试)
#### ==shoot== #### ==shoot==
- [ ] 增加卡弹检测和反转 - [ ] 增加卡弹检测和反转
- [ ] 弹仓盖控制需待servo_motor完成
- [ ] 42mm发射机构兼容
### 待优化 ### 待优化
#### robot_cmd #### robot_cmd
- [x] 解耦各个应用的运行模式 - [ ] 优化消息发布和接收性能若皆为异步并在robottask中执行实际上可以只传递指针
- [ ] 优化消息发布和接收性能
#### gimbal #### gimbal
@ -233,8 +174,6 @@
#### chassis #### chassis
- [ ] 根据电机的实际速度计算底盘的真实运动 - [ ] 根据电机的实际速度计算底盘的真实运动(轮式里程计)
- [ ] 若为双板根据IMU的数据对电机实际速度进行融合 - [ ] 若为双板根据IMU的数据对电机实际速度进行融合
#### shoot

View File

@ -103,7 +103,7 @@ void ChassisInit()
chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE; chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE;
motor_rb = DJIMotorInit(&chassis_motor_config); motor_rb = DJIMotorInit(&chassis_motor_config);
referee_data = Referee_Interactive_init(&huart6,&ui_data); // 裁判系统初始化 referee_data = UITaskInit(&huart6,&ui_data); // 裁判系统初始化,会同时初始化UI
SuperCap_Init_Config_s cap_conf = { SuperCap_Init_Config_s cap_conf = {
.can_config = { .can_config = {

View File

@ -1,3 +1,4 @@
/* 注意该文件应只用于任务初始化,只能被robot.c包含*/
#pragma once #pragma once
#include "FreeRTOS.h" #include "FreeRTOS.h"
@ -46,8 +47,7 @@ void OSTaskInit()
osThreadDef(uitask, StartUITASK, osPriorityNormal, 0, 512); osThreadDef(uitask, StartUITASK, osPriorityNormal, 0, 512);
uiTaskHandle = osThreadCreate(osThread(uitask), NULL); uiTaskHandle = osThreadCreate(osThread(uitask), NULL);
// 若使用HT电机则取消本行注释,该接口会为注册了的电机设备创建线程 HTMotorControlInit(); // 没有注册HT电机则不会执行
// HTMotorControlInit();
} }
void StartINSTASK(void const *argument) void StartINSTASK(void const *argument)
@ -102,10 +102,11 @@ void StartROBOTTASK(void const *argument)
void StartUITASK(void const *argument) void StartUITASK(void const *argument)
{ {
My_UI_init(); MyUIInit();
while (1) while (1)
{ {
Referee_Interactive_task(); // 每次给裁判系统发送完一包数据后,挂起一次,防止卡在裁判系统发送中,详见Referee_Interactive_task函数的refereeSend(); // 每给裁判系统发送一包数据会挂起一次,详见UITask函数的refereeSend()
osDelay(1); // 即使没有任何UI需要刷新,也挂起一次,防止卡在UITask中无法切换 UITask();
osDelay(1); // 即使没有任何UI需要刷新,也挂起一次,防止卡在UITask中无法切换
} }
} }

View File

@ -4,12 +4,11 @@
首先在chassis的初始化中调用裁判系统初始化函数将要绘制的uidata的指针传递给接口接口会返回裁判系统的反馈数据指针。然后在refereeUItask里进行UI初始化确定ui发送的目标并绘制初始化UI。完成后uitask会以10hz的频率按顺序更新UI。 首先在chassis的初始化中调用裁判系统初始化函数将要绘制的uidata的指针传递给接口接口会返回裁判系统的反馈数据指针。然后在refereeUItask里进行UI初始化确定ui发送的目标并绘制初始化UI。完成后uitask会以10hz的频率按顺序更新UI。
## 如何绘制你的自定义UI以绘制超级电容能量条为例
## 如何绘制你的自定义UI以绘制超级电容能量条为例 UI的绘制包含初始化和TASK两个部分初始化部分在`MyUIInit`函数中TASK部分在`MyUIRefresh`函数中。
UI的绘制包含初始化和TASK两个部分初始化部分在`My_UI_init`函数中TASK部分在`My_UI_Refresh`函数中。 ### 初始化部分
### 初始化部分:
初始化部分的UI主要有两个目的静态UI的绘制、为动态UI的绘制做准备。 初始化部分的UI主要有两个目的静态UI的绘制、为动态UI的绘制做准备。
@ -22,7 +21,7 @@ Powerxxx Power为静态不变的冒号后的xxx为变化的量。
为动态UI的准备如下 为动态UI的准备如下
绘制矩形方框内的初始能量条、绘制Power的初始值。 绘制矩形方框内的初始能量条、绘制Power的初始值。
### 绘制字符“Power:” ### 绘制字符“Power:”
设置绘制用结构体此处使用数组是因为需要绘制多个字符。本次绘制的字符为“Power:”只是用到了第6个即xxx[5] 设置绘制用结构体此处使用数组是因为需要绘制多个字符。本次绘制的字符为“Power:”只是用到了第6个即xxx[5]
@ -33,7 +32,7 @@ static String_Data_t UI_State_sta[6]; // 静态
字符格式以及内容设置: 字符格式以及内容设置:
```c ```c
Char_Draw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 7, UI_Color_Green, 18, 2, 620, 230, "Power:"); UICharDraw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 7, UI_Color_Green, 18, 2, 620, 230, "Power:");
//各参数意义如下,函数定义中有详细注释: //各参数意义如下,函数定义中有详细注释:
string String_Data类型变量指针用于存放字符串数据 string String_Data类型变量指针用于存放字符串数据
@ -47,12 +46,10 @@ Char_Draw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 7, UI_Color_Green, 18, 2, 620,
*stringdata 字符串数据 *stringdata 字符串数据
//设置完毕后使用“Char_ReFresh”发送即可 //设置完毕后使用“Char_ReFresh”发送即可
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[5]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[5]);
``` ```
### 绘制能量框
### 绘制能量框:
定义一个图形类结构体,用于绘制能量框: 定义一个图形类结构体,用于绘制能量框:
@ -63,54 +60,55 @@ static Graph_Data_t UI_energy_line[3]; // 电容能量条
能量框参数设置以及发送函数: 能量框参数设置以及发送函数:
```c ```c
Rectangle_Draw(&UI_energy_line[0],"ss6", UI_Graph_ADD, 7, UI_Color_Green,20, 720, 220, 820, 240) UIRectangleDraw(&UI_energy_line[0],"ss6", UI_Graph_ADD, 7, UI_Color_Green,20, 720, 220, 820, 240)
UI_ReFresh(&referee_recv_info->referee_id, 1,UI_energy_line[0]); UIRefresh(&referee_recv_info->referee_id, 1,UI_energy_line[0]);
``` ```
### 绘制power的初始值 ### 绘制power的初始值
```c ```c
Float_Draw(&UI_Energy[1], "sd5", UI_Graph_ADD, 8, UI_Color_Green, 18, 2, 2, 750, 230, 24000); UIFloatDraw(&UI_Energy[1], "sd5", UI_Graph_ADD, 8, UI_Color_Green, 18, 2, 2, 750, 230, 24000);
``` ```
### 绘制能量条的初始值 ### 绘制能量条的初始值
```c ```c
Line_Draw(&UI_Energy[2], "sd6", UI_Graph_ADD, 8, UI_Color_Pink, 30, 720, 160, 1020, 160); UILineDraw(&UI_Energy[2], "sd6", UI_Graph_ADD, 8, UI_Color_Pink, 30, 720, 160, 1020, 160);
``` ```
将两个图形打包发送 将两个图形打包发送
``` ```
UI_ReFresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]); UIRefresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]);
``` ```
## TASK部分 ## TASK部分
task中UI处于动态变化此时需要检测所画的UI是否发生变化若发生变化则刷新对应UI。 task中UI处于动态变化此时需要检测所画的UI是否发生变化若发生变化则刷新对应UI。
### 添加变化检测:
### 添加变化检测
绘制功率部分UI我们需要的是`Chassis_Power_Data_s`中的数据,我们定义`Chassis_Power_Data_s Chassis_Power_Data;`和`Chassis_Power_Data_s Chassis_last_Power_Data;`分别存储此次和上次的对应数据,本次和上次对应检测变化的需求。 绘制功率部分UI我们需要的是`Chassis_Power_Data_s`中的数据,我们定义`Chassis_Power_Data_s Chassis_Power_Data;`和`Chassis_Power_Data_s Chassis_last_Power_Data;`分别存储此次和上次的对应数据,本次和上次对应检测变化的需求。
```c ```c
typedef struct typedef struct
{ {
Referee_Interactive_Flag_t Referee_Interactive_Flag; Referee_Interactive_Flag_t Referee_Interactive_Flag;
// 为UI绘制以及交互数据所用 // 为UI绘制以及交互数据所用
chassis_mode_e chassis_mode; // 底盘模式 chassis_mode_e chassis_mode; // 底盘模式
gimbal_mode_e gimbal_mode; // 云台模式 gimbal_mode_e gimbal_mode; // 云台模式
shoot_mode_e shoot_mode; // 发射模式设置 shoot_mode_e shoot_mode; // 发射模式设置
friction_mode_e friction_mode; // 摩擦轮关闭 friction_mode_e friction_mode; // 摩擦轮关闭
lid_mode_e lid_mode; // 弹舱盖打开 lid_mode_e lid_mode; // 弹舱盖打开
Chassis_Power_Data_s Chassis_Power_Data; // 功率控制 Chassis_Power_Data_s Chassis_Power_Data; // 功率控制
// 上一次的模式用于flag判断 // 上一次的模式用于flag判断
chassis_mode_e chassis_last_mode; chassis_mode_e chassis_last_mode;
gimbal_mode_e gimbal_last_mode; gimbal_mode_e gimbal_last_mode;
shoot_mode_e shoot_last_mode; shoot_mode_e shoot_last_mode;
friction_mode_e friction_last_mode; friction_mode_e friction_last_mode;
lid_mode_e lid_last_mode; lid_mode_e lid_last_mode;
Chassis_Power_Data_s Chassis_last_Power_Data; Chassis_Power_Data_s Chassis_last_Power_Data;
} Referee_Interactive_info_t; } Referee_Interactive_info_t;
``` ```
@ -120,17 +118,19 @@ typedef struct
``` ```
typedef struct typedef struct
{ {
uint32_t chassis_flag : 1; uint32_t chassis_flag : 1;
uint32_t gimbal_flag : 1; uint32_t gimbal_flag : 1;
uint32_t shoot_flag : 1; uint32_t shoot_flag : 1;
uint32_t lid_flag : 1; uint32_t lid_flag : 1;
uint32_t friction_flag : 1; uint32_t friction_flag : 1;
uint32_t Power_flag : 1; uint32_t Power_flag : 1;
} Referee_Interactive_Flag_t; } Referee_Interactive_Flag_t;
``` ```
在变化检测函数中增加对应判断,由于voltage和能量条的变化对应同一个参数`Chassis_last_Power_Data.chassis_power_mx`的变化,所以只需要一个参数即可: 在变化检测函数中增加对应判断,由于voltage和能量条的变化对应同一个参数`Chassis_last_Power_Data.chassis_power_mx`的变化,所以只需要一个参数即可:
``` ```
static void Mode_Change_Check(Referee_Interactive_info_t *_Interactive_data) static void UIChangeCheck(Referee_Interactive_info_t *_Interactive_data)
{ {
if (_Interactive_data->chassis_mode != _Interactive_data->chassis_last_mode) if (_Interactive_data->chassis_mode != _Interactive_data->chassis_last_mode)
...... ......
@ -148,52 +148,49 @@ static void Mode_Change_Check(Referee_Interactive_info_t *_Interactive_data)
} }
} }
``` ```
### 根据功率的变化绘制UI
### 根据功率的变化绘制UI
在绘制变化的UI时由于初始化时已经使用`UI_Graph_ADD`操作添加了UI所以在绘制时需要使用`UI_Graph_Change`操作以便于刷新UI。 在绘制变化的UI时由于初始化时已经使用`UI_Graph_ADD`操作添加了UI所以在绘制时需要使用`UI_Graph_Change`操作以便于刷新UI。
同时完成UI刷新后需要将对应的flag置0以便于下次检测变化 同时完成UI刷新后需要将对应的flag置0以便于下次检测变化
``` ```
if (_Interactive_data->Referee_Interactive_Flag.Power_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.Power_flag == 1)
{ {
Float_Draw(&UI_Energy[1], "sd5", UI_Graph_Change, 8, UI_Color_Green, 18, 2, 2, 750, 230, _Interactive_data->Chassis_Power_Data.chassis_power_mx * 1000); UIFloatDraw(&UI_Energy[1], "sd5", UI_Graph_Change, 8, UI_Color_Green, 18, 2, 2, 750, 230, _Interactive_data->Chassis_Power_Data.chassis_power_mx * 1000);
Line_Draw(&UI_Energy[2], "sd6", UI_Graph_Change, 8, UI_Color_Pink, 30, 720, 160, (uint32_t)750 + _Interactive_data->Chassis_Power_Data.chassis_power_mx * 30, 160); UILineDraw(&UI_Energy[2], "sd6", UI_Graph_Change, 8, UI_Color_Pink, 30, 720, 160, (uint32_t)750 + _Interactive_data->Chassis_Power_Data.chassis_power_mx * 30, 160);
UI_ReFresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]); UIRefresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]);
_Interactive_data->Referee_Interactive_Flag.Power_flag = 0; _Interactive_data->Referee_Interactive_Flag.Power_flag = 0;
} }
``` ```
---
#
#
#
若需要进行多机交互,可增加此函数: 若需要进行多机交互,可增加此函数:
```c ```c
void CommBetweenRobotSend(referee_id_t *_id, robot_interactive_data_t *_data) void CommBetweenRobotSend(referee_id_t *_id, robot_interactive_data_t *_data)
{ {
Communicate_SendData_t SendData; Communicate_SendData_t SendData;
uint8_t temp_datalength = Interactive_Data_LEN_Head + Communicate_Data_LEN; // 计算交互数据长度 6+n,n为交互数据长度 uint8_t temp_datalength = Interactive_Data_LEN_Head + Communicate_Data_LEN; // 计算交互数据长度 6+n,n为交互数据长度
SendData.FrameHeader.SOF = REFEREE_SOF; SendData.FrameHeader.SOF = REFEREE_SOF;
SendData.FrameHeader.DataLength = temp_datalength; SendData.FrameHeader.DataLength = temp_datalength;
SendData.FrameHeader.Seq = UI_Seq; SendData.FrameHeader.Seq = UI_Seq;
SendData.FrameHeader.CRC8 = Get_CRC8_Check_Sum((uint8_t *)&SendData, LEN_CRC8, 0xFF); SendData.FrameHeader.CRC8 = Get_CRC8_Check_Sum((uint8_t *)&SendData, LEN_CRC8, 0xFF);
SendData.CmdID = ID_student_interactive; SendData.CmdID = ID_student_interactive;
SendData.datahead.data_cmd_id = Communicate_Data_ID; SendData.datahead.data_cmd_id = Communicate_Data_ID;
SendData.datahead.sender_ID = _id->Robot_ID; SendData.datahead.sender_ID = _id->Robot_ID;
SendData.datahead.receiver_ID = _id->Receiver_Robot_ID; SendData.datahead.receiver_ID = _id->Receiver_Robot_ID;
SendData.Data = *_data; SendData.Data = *_data;
SendData.frametail = Get_CRC16_Check_Sum((uint8_t *)&SendData, LEN_HEADER + LEN_CMDID + temp_datalength, 0xFFFF); SendData.frametail = Get_CRC16_Check_Sum((uint8_t *)&SendData, LEN_HEADER + LEN_CMDID + temp_datalength, 0xFFFF);
RefereeSend((uint8_t *)&SendData, LEN_HEADER + LEN_CMDID + temp_datalength + LEN_TAIL); // 发送 RefereeSend((uint8_t *)&SendData, LEN_HEADER + LEN_CMDID + temp_datalength + LEN_TAIL); // 发送
UI_Seq++; // 包序号+1 UI_Seq++; // 包序号+1
} }
``` ```

View File

@ -57,8 +57,8 @@ void UIDelete(referee_id_t *_id, uint8_t Del_Operate, uint8_t Del_Layer)
End_xEnd_y xy坐标 End_xEnd_y xy坐标
**********************************************************************************************************/ **********************************************************************************************************/
void Line_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UILineDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y) uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) // 填充至0为止 for (i = 0; i < 3 && graphname[i] != '\0'; i++) // 填充至0为止
@ -91,8 +91,8 @@ void Line_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, u
Start_xStart_y xy坐标 Start_xStart_y xy坐标
End_xEnd_y xy坐标 End_xEnd_y xy坐标
**********************************************************************************************************/ **********************************************************************************************************/
void Rectangle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIRectangleDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y) uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -126,8 +126,8 @@ void Rectangle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Opera
Graph_Radius Graph_Radius
**********************************************************************************************************/ **********************************************************************************************************/
void Circle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UICircleDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_Radius) uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_Radius)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -159,8 +159,8 @@ void Circle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate,
Start_xStart_y xy坐标 Start_xStart_y xy坐标
End_xEnd_y xy半轴长度 End_xEnd_y xy半轴长度
**********************************************************************************************************/ **********************************************************************************************************/
void Elliptical_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIOvalDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t end_x, uint32_t end_y) uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t end_x, uint32_t end_y)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -196,9 +196,9 @@ void Elliptical_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Oper
x_Length,y_Length xy半轴长度 x_Length,y_Length xy半轴长度
**********************************************************************************************************/ **********************************************************************************************************/
void Arc_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIArcDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_StartAngle, uint32_t Graph_EndAngle, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_StartAngle, uint32_t Graph_EndAngle, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y,
uint32_t end_x, uint32_t end_y) uint32_t end_x, uint32_t end_y)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -236,8 +236,8 @@ void Arc_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, ui
end_y=(a>>21)&0x7FF; end_y=(a>>21)&0x7FF;
**********************************************************************************************************/ **********************************************************************************************************/
void Float_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIFloatDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Digit, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Float) uint32_t Graph_Size, uint32_t Graph_Digit, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Float)
{ {
int i; int i;
@ -274,8 +274,8 @@ void Float_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate,
end_x=(a>>10)&0x7FF; end_x=(a>>10)&0x7FF;
end_y=(a>>21)&0x7FF; end_y=(a>>21)&0x7FF;
**********************************************************************************************************/ **********************************************************************************************************/
void Integer_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIIntDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Integer) uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Integer)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -311,8 +311,8 @@ void Integer_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate
fmt需要显示的字符串 fmt需要显示的字符串
使printf函数 使printf函数
**********************************************************************************************************/ **********************************************************************************************************/
void Char_Draw(String_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UICharDraw(String_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, char *fmt, ...) uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, char *fmt, ...)
{ {
int i; int i;
for (i = 0; i < 3 && graphname[i] != '\0'; i++) for (i = 0; i < 3 && graphname[i] != '\0'; i++)
@ -345,7 +345,7 @@ void Char_Draw(String_Data_t *graph, char graphname[3], uint32_t Graph_Operate,
... ...
Tips1257 Tips1257
*/ */
void UI_ReFresh(referee_id_t *_id, int cnt, ...) void UIGraphRefresh(referee_id_t *_id, int cnt, ...)
{ {
UI_GraphReFresh_t UI_GraphReFresh_data; UI_GraphReFresh_t UI_GraphReFresh_data;
Graph_Data_t graphData; Graph_Data_t graphData;
@ -396,7 +396,7 @@ void UI_ReFresh(referee_id_t *_id, int cnt, ...)
} }
/************************************************UI推送字符使更改生效*********************************/ /************************************************UI推送字符使更改生效*********************************/
void Char_ReFresh(referee_id_t *_id, String_Data_t string_Data) void UICharRefresh(referee_id_t *_id, String_Data_t string_Data)
{ {
static UI_CharReFresh_t UI_CharReFresh_data; static UI_CharReFresh_t UI_CharReFresh_data;

View File

@ -40,33 +40,33 @@ typedef struct
void UIDelete(referee_id_t *_id, uint8_t Del_Operate, uint8_t Del_Layer); void UIDelete(referee_id_t *_id, uint8_t Del_Operate, uint8_t Del_Layer);
void Line_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UILineDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y); uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y);
void Rectangle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIRectangleDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y); uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t End_x, uint32_t End_y);
void Circle_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UICircleDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_Radius); uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_Radius);
void Elliptical_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIOvalDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t end_x, uint32_t end_y); uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t end_x, uint32_t end_y);
void Arc_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIArcDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_StartAngle, uint32_t Graph_EndAngle, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, uint32_t Graph_StartAngle, uint32_t Graph_EndAngle, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y,
uint32_t end_x, uint32_t end_y); uint32_t end_x, uint32_t end_y);
void Float_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIFloatDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Digit, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Float); uint32_t Graph_Size, uint32_t Graph_Digit, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Float);
void Integer_Draw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UIIntDraw(Graph_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Integer); uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, int32_t Graph_Integer);
void Char_Draw(String_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color, void UICharDraw(String_Data_t *graph, char graphname[3], uint32_t Graph_Operate, uint32_t Graph_Layer, uint32_t Graph_Color,
uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, char *fmt, ...); uint32_t Graph_Size, uint32_t Graph_Width, uint32_t Start_x, uint32_t Start_y, char *fmt, ...);
void UI_ReFresh(referee_id_t *_id, int cnt, ...); void UIGraphRefresh(referee_id_t *_id, int cnt, ...);
void Char_ReFresh(referee_id_t *_id, String_Data_t string_Data); void UICharRefresh(referee_id_t *_id, String_Data_t string_Data);
#endif #endif

View File

@ -35,13 +35,11 @@ static void DeterminRobotID()
referee_recv_info->referee_id.Receiver_Robot_ID = 0; referee_recv_info->referee_id.Receiver_Robot_ID = 0;
} }
static void My_UI_Refresh(referee_info_t *referee_recv_info, Referee_Interactive_info_t *_Interactive_data); static void MyUIRefresh(referee_info_t *referee_recv_info, Referee_Interactive_info_t *_Interactive_data);
static void Mode_Change_Check(Referee_Interactive_info_t *_Interactive_data); // 模式切换检测 static void UIChangeCheck(Referee_Interactive_info_t *_Interactive_data); // 模式切换检测
static void RobotModeTest(Referee_Interactive_info_t *_Interactive_data); // 测试用函数,实现模式自动变化
// syhtod 正式上车后需删除 referee_info_t *UITaskInit(UART_HandleTypeDef *referee_usart_handle, Referee_Interactive_info_t *UI_data)
static void robot_mode_change(Referee_Interactive_info_t *_Interactive_data); // 测试用函数,实现模式自动变化
referee_info_t *Referee_Interactive_init(UART_HandleTypeDef *referee_usart_handle, Referee_Interactive_info_t *UI_data)
{ {
referee_recv_info = RefereeInit(referee_usart_handle); // 初始化裁判系统的串口,并返回裁判系统反馈数据指针 referee_recv_info = RefereeInit(referee_usart_handle); // 初始化裁判系统的串口,并返回裁判系统反馈数据指针
Interactive_data = UI_data; // 获取UI绘制需要的机器人状态数据 Interactive_data = UI_data; // 获取UI绘制需要的机器人状态数据
@ -49,10 +47,10 @@ referee_info_t *Referee_Interactive_init(UART_HandleTypeDef *referee_usart_handl
return referee_recv_info; return referee_recv_info;
} }
void Referee_Interactive_task() void UITask()
{ {
robot_mode_change(Interactive_data); // 测试用函数,实现模式自动变化 RobotModeTest(Interactive_data); // 测试用函数,实现模式自动变化,用于检查该任务和裁判系统是否连接正常
My_UI_Refresh(referee_recv_info, Interactive_data); MyUIRefresh(referee_recv_info, Interactive_data);
} }
static Graph_Data_t UI_shoot_line[10]; // 射击准线 static Graph_Data_t UI_shoot_line[10]; // 射击准线
@ -61,66 +59,67 @@ static String_Data_t UI_State_sta[6]; // 机器人状态,静态只需画一次
static String_Data_t UI_State_dyn[6]; // 机器人状态,动态先add才能change static String_Data_t UI_State_dyn[6]; // 机器人状态,动态先add才能change
static uint32_t shoot_line_location[10] = {540, 960, 490, 515, 565}; static uint32_t shoot_line_location[10] = {540, 960, 490, 515, 565};
void My_UI_init() void MyUIInit()
{ {
if (!referee_recv_info->init_flag) if (!referee_recv_info->init_flag)
vTaskDelete(NULL); // 如果没有初始化裁判系统则直接删除ui任务 vTaskDelete(NULL); // 如果没有初始化裁判系统则直接删除ui任务
while (referee_recv_info->GameRobotState.robot_id == 0) while (referee_recv_info->GameRobotState.robot_id == 0)
osDelay(100); // 若还未收到裁判系统数据,等待一段时间后再检查 osDelay(100); // 若还未收到裁判系统数据,等待一段时间后再检查
DeterminRobotID(); // 确定ui要发送到的目标客户端 DeterminRobotID(); // 确定ui要发送到的目标客户端
UIDelete(&referee_recv_info->referee_id, UI_Data_Del_ALL, 0); // 清空UI UIDelete(&referee_recv_info->referee_id, UI_Data_Del_ALL, 0); // 清空UI
// 绘制发射基准线 // 绘制发射基准线
Line_Draw(&UI_shoot_line[0], "sl0", UI_Graph_ADD, 7, UI_Color_White, 3, 710, shoot_line_location[0], 1210, shoot_line_location[0]); UILineDraw(&UI_shoot_line[0], "sl0", UI_Graph_ADD, 7, UI_Color_White, 3, 710, shoot_line_location[0], 1210, shoot_line_location[0]);
Line_Draw(&UI_shoot_line[1], "sl1", UI_Graph_ADD, 7, UI_Color_White, 3, shoot_line_location[1], 340, shoot_line_location[1], 740); UILineDraw(&UI_shoot_line[1], "sl1", UI_Graph_ADD, 7, UI_Color_White, 3, shoot_line_location[1], 340, shoot_line_location[1], 740);
Line_Draw(&UI_shoot_line[2], "sl2", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[2], 1110, shoot_line_location[2]); UILineDraw(&UI_shoot_line[2], "sl2", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[2], 1110, shoot_line_location[2]);
Line_Draw(&UI_shoot_line[3], "sl3", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[3], 1110, shoot_line_location[3]); UILineDraw(&UI_shoot_line[3], "sl3", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[3], 1110, shoot_line_location[3]);
Line_Draw(&UI_shoot_line[4], "sl4", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[4], 1110, shoot_line_location[4]); UILineDraw(&UI_shoot_line[4], "sl4", UI_Graph_ADD, 7, UI_Color_Yellow, 2, 810, shoot_line_location[4], 1110, shoot_line_location[4]);
UI_ReFresh(&referee_recv_info->referee_id, 5, UI_shoot_line[0], UI_shoot_line[1], UI_shoot_line[2], UI_shoot_line[3], UI_shoot_line[4]); UIGraphRefresh(&referee_recv_info->referee_id, 5, UI_shoot_line[0], UI_shoot_line[1], UI_shoot_line[2], UI_shoot_line[3], UI_shoot_line[4]);
// 绘制车辆状态标志指示 // 绘制车辆状态标志指示
Char_Draw(&UI_State_sta[0], "ss0", UI_Graph_ADD, 8, UI_Color_Main, 15, 2, 150, 750, "chassis:"); UICharDraw(&UI_State_sta[0], "ss0", UI_Graph_ADD, 8, UI_Color_Main, 15, 2, 150, 750, "chassis:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[0]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[0]);
Char_Draw(&UI_State_sta[1], "ss1", UI_Graph_ADD, 8, UI_Color_Yellow, 15, 2, 150, 700, "gimbal:"); UICharDraw(&UI_State_sta[1], "ss1", UI_Graph_ADD, 8, UI_Color_Yellow, 15, 2, 150, 700, "gimbal:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[1]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[1]);
Char_Draw(&UI_State_sta[2], "ss2", UI_Graph_ADD, 8, UI_Color_Orange, 15, 2, 150, 650, "shoot:"); UICharDraw(&UI_State_sta[2], "ss2", UI_Graph_ADD, 8, UI_Color_Orange, 15, 2, 150, 650, "shoot:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[2]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[2]);
Char_Draw(&UI_State_sta[3], "ss3", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 150, 600, "frict:"); UICharDraw(&UI_State_sta[3], "ss3", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 150, 600, "frict:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[3]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[3]);
Char_Draw(&UI_State_sta[4], "ss4", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 150, 550, "lid:"); UICharDraw(&UI_State_sta[4], "ss4", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 150, 550, "lid:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[4]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[4]);
// 绘制车辆状态标志,动态 // 绘制车辆状态标志,动态
// 由于初始化时xxx_last_mode默认为0所以此处对应UI也应该设为0时对应的UI防止模式不变的情况下无法置位flag导致UI无法刷新 // 由于初始化时xxx_last_mode默认为0所以此处对应UI也应该设为0时对应的UI防止模式不变的情况下无法置位flag导致UI无法刷新
Char_Draw(&UI_State_dyn[0], "sd0", UI_Graph_ADD, 8, UI_Color_Main, 15, 2, 270, 750, "zeroforce"); UICharDraw(&UI_State_dyn[0], "sd0", UI_Graph_ADD, 8, UI_Color_Main, 15, 2, 270, 750, "zeroforce");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[0]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[0]);
Char_Draw(&UI_State_dyn[1], "sd1", UI_Graph_ADD, 8, UI_Color_Yellow, 15, 2, 270, 700, "zeroforce"); UICharDraw(&UI_State_dyn[1], "sd1", UI_Graph_ADD, 8, UI_Color_Yellow, 15, 2, 270, 700, "zeroforce");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[1]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[1]);
Char_Draw(&UI_State_dyn[2], "sd2", UI_Graph_ADD, 8, UI_Color_Orange, 15, 2, 270, 650, "off"); UICharDraw(&UI_State_dyn[2], "sd2", UI_Graph_ADD, 8, UI_Color_Orange, 15, 2, 270, 650, "off");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[2]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[2]);
Char_Draw(&UI_State_dyn[3], "sd3", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 270, 600, "off"); UICharDraw(&UI_State_dyn[3], "sd3", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 270, 600, "off");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[3]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[3]);
Char_Draw(&UI_State_dyn[4], "sd4", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 270, 550, "open "); UICharDraw(&UI_State_dyn[4], "sd4", UI_Graph_ADD, 8, UI_Color_Pink, 15, 2, 270, 550, "open ");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[4]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[4]);
// 底盘功率显示,静态 // 底盘功率显示,静态
Char_Draw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 7, UI_Color_Green, 18, 2, 620, 230, "Power:"); UICharDraw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 7, UI_Color_Green, 18, 2, 620, 230, "Power:");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_sta[5]); UICharRefresh(&referee_recv_info->referee_id, UI_State_sta[5]);
// 能量条框 // 能量条框
Rectangle_Draw(&UI_Energy[0], "ss6", UI_Graph_ADD, 7, UI_Color_Green, 2, 720, 140, 1220, 180); UIRectangleDraw(&UI_Energy[0], "ss6", UI_Graph_ADD, 7, UI_Color_Green, 2, 720, 140, 1220, 180);
UI_ReFresh(&referee_recv_info->referee_id, 1, UI_Energy[0]); UIGraphRefresh(&referee_recv_info->referee_id, 1, UI_Energy[0]);
// 底盘功率显示,动态 // 底盘功率显示,动态
Float_Draw(&UI_Energy[1], "sd5", UI_Graph_ADD, 8, UI_Color_Green, 18, 2, 2, 750, 230, 24000); UIFloatDraw(&UI_Energy[1], "sd5", UI_Graph_ADD, 8, UI_Color_Green, 18, 2, 2, 750, 230, 24000);
// 能量条初始状态 // 能量条初始状态
Line_Draw(&UI_Energy[2], "sd6", UI_Graph_ADD, 8, UI_Color_Pink, 30, 720, 160, 1020, 160); UILineDraw(&UI_Energy[2], "sd6", UI_Graph_ADD, 8, UI_Color_Pink, 30, 720, 160, 1020, 160);
UI_ReFresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]); UIGraphRefresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]);
} }
// 测试用函数,实现模式自动变化,用于检查该任务和裁判系统是否连接正常
static uint8_t count = 0; static uint8_t count = 0;
static uint16_t count1 = 0; static uint16_t count1 = 0;
static void robot_mode_change(Referee_Interactive_info_t *_Interactive_data) // 测试用函数,实现模式自动变化 static void RobotModeTest(Referee_Interactive_info_t *_Interactive_data) // 测试用函数,实现模式自动变化
{ {
count++; count++;
if (count >= 50) if (count >= 50)
@ -174,29 +173,29 @@ static void robot_mode_change(Referee_Interactive_info_t *_Interactive_data) //
} }
} }
static void My_UI_Refresh(referee_info_t *referee_recv_info, Referee_Interactive_info_t *_Interactive_data) static void MyUIRefresh(referee_info_t *referee_recv_info, Referee_Interactive_info_t *_Interactive_data)
{ {
Mode_Change_Check(_Interactive_data); UIChangeCheck(_Interactive_data);
// chassis // chassis
if (_Interactive_data->Referee_Interactive_Flag.chassis_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.chassis_flag == 1)
{ {
switch (_Interactive_data->chassis_mode) switch (_Interactive_data->chassis_mode)
{ {
case CHASSIS_ZERO_FORCE: case CHASSIS_ZERO_FORCE:
Char_Draw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "zeroforce"); UICharDraw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "zeroforce");
break; break;
case CHASSIS_ROTATE: case CHASSIS_ROTATE:
Char_Draw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "rotate "); UICharDraw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "rotate ");
// 此处注意字数对齐问题,字数相同才能覆盖掉 // 此处注意字数对齐问题,字数相同才能覆盖掉
break; break;
case CHASSIS_NO_FOLLOW: case CHASSIS_NO_FOLLOW:
Char_Draw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "nofollow "); UICharDraw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "nofollow ");
break; break;
case CHASSIS_FOLLOW_GIMBAL_YAW: case CHASSIS_FOLLOW_GIMBAL_YAW:
Char_Draw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "follow "); UICharDraw(&UI_State_dyn[0], "sd0", UI_Graph_Change, 8, UI_Color_Main, 15, 2, 270, 750, "follow ");
break; break;
} }
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[0]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[0]);
_Interactive_data->Referee_Interactive_Flag.chassis_flag = 0; _Interactive_data->Referee_Interactive_Flag.chassis_flag = 0;
} }
// gimbal // gimbal
@ -206,50 +205,50 @@ static void My_UI_Refresh(referee_info_t *referee_recv_info, Referee_Interactive
{ {
case GIMBAL_ZERO_FORCE: case GIMBAL_ZERO_FORCE:
{ {
Char_Draw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "zeroforce"); UICharDraw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "zeroforce");
break; break;
} }
case GIMBAL_FREE_MODE: case GIMBAL_FREE_MODE:
{ {
Char_Draw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "free "); UICharDraw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "free ");
break; break;
} }
case GIMBAL_GYRO_MODE: case GIMBAL_GYRO_MODE:
{ {
Char_Draw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "gyro "); UICharDraw(&UI_State_dyn[1], "sd1", UI_Graph_Change, 8, UI_Color_Yellow, 15, 2, 270, 700, "gyro ");
break; break;
} }
} }
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[1]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[1]);
_Interactive_data->Referee_Interactive_Flag.gimbal_flag = 0; _Interactive_data->Referee_Interactive_Flag.gimbal_flag = 0;
} }
// shoot // shoot
if (_Interactive_data->Referee_Interactive_Flag.shoot_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.shoot_flag == 1)
{ {
Char_Draw(&UI_State_dyn[2], "sd2", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 650, _Interactive_data->shoot_mode == SHOOT_ON ? "on " : "off"); UICharDraw(&UI_State_dyn[2], "sd2", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 650, _Interactive_data->shoot_mode == SHOOT_ON ? "on " : "off");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[2]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[2]);
_Interactive_data->Referee_Interactive_Flag.shoot_flag = 0; _Interactive_data->Referee_Interactive_Flag.shoot_flag = 0;
} }
// friction // friction
if (_Interactive_data->Referee_Interactive_Flag.friction_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.friction_flag == 1)
{ {
Char_Draw(&UI_State_dyn[3], "sd3", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 600, _Interactive_data->friction_mode == FRICTION_ON ? "on " : "off"); UICharDraw(&UI_State_dyn[3], "sd3", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 600, _Interactive_data->friction_mode == FRICTION_ON ? "on " : "off");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[3]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[3]);
_Interactive_data->Referee_Interactive_Flag.friction_flag = 0; _Interactive_data->Referee_Interactive_Flag.friction_flag = 0;
} }
// lid // lid
if (_Interactive_data->Referee_Interactive_Flag.lid_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.lid_flag == 1)
{ {
Char_Draw(&UI_State_dyn[4], "sd4", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 550, _Interactive_data->lid_mode == LID_OPEN ? "open " : "close"); UICharDraw(&UI_State_dyn[4], "sd4", UI_Graph_Change, 8, UI_Color_Pink, 15, 2, 270, 550, _Interactive_data->lid_mode == LID_OPEN ? "open " : "close");
Char_ReFresh(&referee_recv_info->referee_id, UI_State_dyn[4]); UICharRefresh(&referee_recv_info->referee_id, UI_State_dyn[4]);
_Interactive_data->Referee_Interactive_Flag.lid_flag = 0; _Interactive_data->Referee_Interactive_Flag.lid_flag = 0;
} }
// power // power
if (_Interactive_data->Referee_Interactive_Flag.Power_flag == 1) if (_Interactive_data->Referee_Interactive_Flag.Power_flag == 1)
{ {
Float_Draw(&UI_Energy[1], "sd5", UI_Graph_Change, 8, UI_Color_Green, 18, 2, 2, 750, 230, _Interactive_data->Chassis_Power_Data.chassis_power_mx * 1000); UIFloatDraw(&UI_Energy[1], "sd5", UI_Graph_Change, 8, UI_Color_Green, 18, 2, 2, 750, 230, _Interactive_data->Chassis_Power_Data.chassis_power_mx * 1000);
Line_Draw(&UI_Energy[2], "sd6", UI_Graph_Change, 8, UI_Color_Pink, 30, 720, 160, (uint32_t)750 + _Interactive_data->Chassis_Power_Data.chassis_power_mx * 30, 160); UILineDraw(&UI_Energy[2], "sd6", UI_Graph_Change, 8, UI_Color_Pink, 30, 720, 160, (uint32_t)750 + _Interactive_data->Chassis_Power_Data.chassis_power_mx * 30, 160);
UI_ReFresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]); UIGraphRefresh(&referee_recv_info->referee_id, 2, UI_Energy[1], UI_Energy[2]);
_Interactive_data->Referee_Interactive_Flag.Power_flag = 0; _Interactive_data->Referee_Interactive_Flag.Power_flag = 0;
} }
} }
@ -260,7 +259,7 @@ static void My_UI_Refresh(referee_info_t *referee_recv_info, Referee_Interactive
* @retval none * @retval none
* @attention * @attention
*/ */
static void Mode_Change_Check(Referee_Interactive_info_t *_Interactive_data) static void UIChangeCheck(Referee_Interactive_info_t *_Interactive_data)
{ {
if (_Interactive_data->chassis_mode != _Interactive_data->chassis_last_mode) if (_Interactive_data->chassis_mode != _Interactive_data->chassis_last_mode)
{ {

View File

@ -8,18 +8,18 @@
* @brief (UI和多机通信) * @brief (UI和多机通信)
* *
*/ */
referee_info_t *Referee_Interactive_init(UART_HandleTypeDef *referee_usart_handle, Referee_Interactive_info_t *UI_data); referee_info_t *UITaskInit(UART_HandleTypeDef *referee_usart_handle, Referee_Interactive_info_t *UI_data);
/** /**
* @brief referee task之前调用,freertos.c中 * @brief referee task之前调用,freertos.c中
* *
*/ */
void My_UI_init(); void MyUIInit();
/** /**
* @brief (UI和多机通信) * @brief (UI和多机通信)
* *
*/ */
void Referee_Interactive_task(); void UITask();
#endif // REFEREE_H #endif // REFEREE_H