@@ -49,20 +49,25 @@ referee_info_t *UITaskInit(UART_HandleTypeDef *referee_usart_handle, Referee_Int
void UITask ( )
{
RobotModeTest( Interactive_data) ; // 测试用函数,实现模式自动变化,用于检查该任务和裁判系统是否连接正常
// RobotModeTest( Interactive_data); // 测试用函数,实现模式自动变化,用于检查该任务和裁判系统是否连接正常
MyUIRefresh ( referee_recv_info , Interactive_data ) ;
}
static Graph_Data_t UI_shoot_line [ 10 ] ; // 射击准线
static Graph_Data_t UI_Energy [ 3 ] ; // 电容能量条
static Graph_Data_t UI_Vision [ 3 ] ; // 视觉标识框
static String_Data_t UI_State_sta [ 6 ] ; // 机器人状态,静态只需画一次
static String_Data_t UI_State_dyn [ 6 ] ; // 机器人状态,动态先add才能change
static uint32_t shoot_line_location [ 10 ] = { 540 , 960 , 49 0, 515 , 565 } ;
static uint32_t shoot_line_location [ 10 ] = { 540 , 960 , 600 , 46 0, 420 , 350 } ;
void MyUIInit ( )
{
if ( ! referee_recv_info - > init_flag )
vTaskDelete ( NULL ) ; // 如果没有初始化裁判系统则直接删除ui任务
if ( Interactive_data - > ui_mode = = UI_KEEP )
return ;
while ( referee_recv_info - > GameRobotState . robot_id = = 0 )
osDelay ( 100 ) ; // 若还未收到裁判系统数据,等待一段时间后再检查
@@ -75,38 +80,39 @@ void MyUIInit()
UILineDraw ( & 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 [ 3 ] , " sl3 " , UI_Graph_ADD , 7 , UI_Color_Yellow , 2 , 810 , shoot_line_location [ 3 ] , 1110 , shoot_line_location [ 3 ] ) ;
UILineDraw ( & UI_shoot_line [ 4 ] , " sl4 " , UI_Graph_ADD , 7 , UI_Color_Yellow , 2 , 810 , shoot_line_location [ 4 ] , 1110 , shoot_line_location [ 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 ] ) ;
UILineDraw ( & UI_shoot_line [ 5 ] , " sl5 " , UI_Graph_ADD , 7 , UI_Color_Yellow , 2 , 810 , shoot_line_location [ 5 ] , 1110 , shoot_line_location [ 5 ] ) ;
UIGraphRefresh ( & referee_recv_info - > referee_id , 7 , UI_shoot_line [ 0 ] , UI_shoot_line [ 1 ] , UI_shoot_line [ 2 ] , UI_shoot_line [ 3 ] , UI_shoot_line [ 4 ] , UI_shoot_line [ 5 ] , UI_shoot_line [ 6 ] ) ;
// 绘制车辆状态标志指示
UICharDraw ( & UI_State_sta [ 0 ] , " ss0 " , UI_Graph_ADD , 8 , UI_Color_Main , 15 , 2 , 150 , 750 , " chassis: " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 0 ] ) ;
UICharDraw ( & 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 , " frict :" ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 1 ] ) ;
UICharDraw ( & 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 , " vision :" ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 2 ] ) ;
UICharDraw ( & UI_State_sta [ 3 ] , " ss3 " , UI_Graph_ADD , 8 , UI_Color_Pink , 15 , 2 , 150 , 600 , " frict :" ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 3 ] ) ;
UICharDraw ( & 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_Cyan , 15 , 2 , 150 , 600 , " loader :" ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 4 ] ) ;
// 绘制车辆状态标志,动态
// 由于初始化时xxx_last_mode默认为0, 所以此处对应UI也应该设为0时对应的UI, 防止模式不变的情况下无法置位flag, 导致UI无法刷新
UICharDraw ( & UI_State_dyn [ 0 ] , " sd0 " , UI_Graph_ADD , 8 , UI_Color_Main , 15 , 2 , 270 , 750 , " zeroforce " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 0 ] ) ;
UICharDraw ( & 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_Pink , 15 , 2 , 270 , 700 , " off " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 1 ] ) ;
UICharDraw ( & 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 , " unlock " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 2 ] ) ;
UICharDraw ( & UI_State_dyn [ 3 ] , " sd3 " , UI_Graph_ADD , 8 , UI_Color_Pink , 15 , 2 , 270 , 600 , " off " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 3 ] ) ;
UICharDraw ( & 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_Cyan , 15 , 2 , 270 , 600 , " stop " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 4 ] ) ;
// 绘制视觉标识框
UIRectangleDraw ( & UI_Vision [ 0 ] , " sd3 " , UI_Graph_ADD , 9 , UI_Color_Green , 2 , 650 , 700 , 1270 , 380 ) ;
UIGraphRefresh ( & referee_recv_info - > referee_id , 1 , UI_Vision [ 0 ] ) ;
// 底盘功率显示,静态
UICharDraw ( & UI_State_sta [ 5 ] , " ss5 " , UI_Graph_ADD , 7 , UI_Color_Green , 18 , 2 , 620 , 230 , " Power: " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_sta [ 5 ] ) ;
// 能量条框
UIRectangleDraw ( & UI_Energy [ 0 ] , " ss6 " , UI_Graph_ADD , 7 , UI_Color_Green , 2 , 720 , 140 , 12 20 , 180 ) ;
UIRectangleDraw ( & UI_Energy [ 0 ] , " ss6 " , UI_Graph_ADD , 7 , UI_Color_Green , 2 , 720 , 140 , 14 20 , 180 ) ;
UIGraphRefresh ( & referee_recv_info - > referee_id , 1 , UI_Energy [ 0 ] ) ;
// 底盘功率显示,动态
@@ -152,6 +158,7 @@ static void RobotModeTest(Referee_Interactive_info_t *_Interactive_data) // 测
}
case 2 :
{
_Interactive_data - > chassis_mode = CHASSIS_RESET ;
_Interactive_data - > gimbal_mode = GIMBAL_GYRO_MODE ;
_Interactive_data - > shoot_mode = SHOOT_ON ;
_Interactive_data - > friction_mode = FRICTION_ON ;
@@ -187,6 +194,9 @@ static void MyUIRefresh(referee_info_t *referee_recv_info, Referee_Interactive_i
UICharDraw ( & UI_State_dyn [ 0 ] , " sd0 " , UI_Graph_Change , 8 , UI_Color_Main , 15 , 2 , 270 , 750 , " rotate " ) ;
// 此处注意字数对齐问题,字数相同才能覆盖掉
break ;
case CHASSIS_RESET :
UICharDraw ( & UI_State_dyn [ 0 ] , " sd0 " , UI_Graph_Change , 8 , UI_Color_Main , 15 , 2 , 270 , 750 , " reset " ) ;
break ;
case CHASSIS_FOLLOW_GIMBAL_YAW :
UICharDraw ( & UI_State_dyn [ 0 ] , " sd0 " , UI_Graph_Change , 8 , UI_Color_Main , 15 , 2 , 270 , 750 , " follow " ) ;
break ;
@@ -194,50 +204,55 @@ static void MyUIRefresh(referee_info_t *referee_recv_info, Referee_Interactive_i
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 0 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . chassis_flag = 0 ;
}
// gimbal
if ( _Interactive_data - > Referee_Interactive_Flag . gimbal_flag = = 1 )
{
switch ( _Interactive_data - > gimbal_mode )
{
case GIMBAL_ZERO_FORCE :
{
UICharDraw ( & UI_State_dyn [ 1 ] , " sd1 " , UI_Graph_Change , 8 , UI_Color_Yellow , 15 , 2 , 270 , 700 , " zeroforce " ) ;
break ;
}
case GIMBAL_FREE_MODE :
{
UICharDraw ( & UI_State_dyn [ 1 ] , " sd1 " , UI_Graph_Change , 8 , UI_Color_Yellow , 15 , 2 , 270 , 700 , " free " ) ;
break ;
}
case GIMBAL_GYRO_MODE :
{
UICharDraw ( & UI_State_dyn [ 1 ] , " sd1 " , UI_Graph_Change , 8 , UI_Color_Yellow , 15 , 2 , 270 , 700 , " gyro " ) ;
break ;
}
}
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 1 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . gimbal_flag = 0 ;
}
// shoot
if ( _Interactive_data - > Referee_Interactive_Flag . shoot_flag = = 1 )
{
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 " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 2 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . shoot_flag = 0 ;
}
// friction
if ( _Interactive_data - > Referee_Interactive_Flag . friction_flag = = 1 )
{
UICharDraw ( & UI_State_dyn [ 3 ] , " sd3 " , UI_Graph_Change , 8 , UI_Color_Pink , 15 , 2 , 270 , 6 00, _Interactive_data - > friction_mode = = FRICTION_ON ? " on " : " off " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 3 ] ) ;
UICharDraw ( & UI_State_dyn [ 1 ] , " sd1 " , UI_Graph_Change , 8 , UI_Color_Pink , 15 , 2 , 270 , 7 00, _Interactive_data - > friction_mode = = FRICTION_ON ? " on " : " off " ) ;
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 1 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . friction_flag = 0 ;
}
// lid
if ( _Interactive_data - > Referee_Interactive_Flag . lid _flag = = 1 )
// vision
if ( _Interactive_data - > Referee_Interactive_Flag . vision _flag = = 1 )
{
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 " ) ;
switch ( _Interactive_data - > vision_mode )
{
case UNLOCK :
UICharDraw ( & UI_State_dyn [ 2 ] , " sd2 " , UI_Graph_Change , 8 , UI_Color_Orange , 15 , 2 , 270 , 650 , " unlock " ) ;
UIRectangleDraw ( & UI_Vision [ 0 ] , " sd3 " , UI_Graph_Change , 9 , UI_Color_Green , 2 , 650 , 700 , 1270 , 380 ) ;
break ;
case CONVERGE :
UICharDraw ( & UI_State_dyn [ 2 ] , " sd2 " , UI_Graph_Change , 8 , UI_Color_Orange , 15 , 2 , 270 , 650 , " converge " ) ;
UIRectangleDraw ( & UI_Vision [ 0 ] , " sd3 " , UI_Graph_Change , 9 , UI_Color_Purplish_red , 2 , 650 , 700 , 1270 , 380 ) ;
break ;
case LOCK :
UICharDraw ( & UI_State_dyn [ 2 ] , " sd2 " , UI_Graph_Change , 8 , UI_Color_Orange , 15 , 2 , 270 , 650 , " lock " ) ;
UIRectangleDraw ( & UI_Vision [ 0 ] , " sd3 " , UI_Graph_Change , 9 , UI_Color_Purplish_red , 2 , 650 , 700 , 1270 , 380 ) ;
break ;
}
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 2 ] ) ;
UIGraphRefresh ( & referee_recv_info - > referee_id , 1 , UI_Vision [ 0 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . vision_flag = 0 ;
}
// loader
if ( _Interactive_data - > Referee_Interactive_Flag . loader_flag = = 1 )
{
switch ( _Interactive_data - > loader_mode )
{
case LOAD_1_BULLET :
UICharDraw ( & UI_State_dyn [ 4 ] , " sd4 " , UI_Graph_Change , 8 , UI_Color_Cyan , 15 , 2 , 270 , 600 , " 1 bull " ) ;
break ;
case LOAD_3_BULLET :
UICharDraw ( & UI_State_dyn [ 4 ] , " sd4 " , UI_Graph_Change , 8 , UI_Color_Purplish_red , 15 , 2 , 270 , 600 , " 3 bull " ) ;
break ;
case LOAD_BURSTFIRE :
UICharDraw ( & UI_State_dyn [ 4 ] , " sd4 " , UI_Graph_Change , 8 , UI_Color_Purplish_red , 15 , 2 , 270 , 600 , " burst " ) ;
break ;
case LOAD_STOP :
UICharDraw ( & UI_State_dyn [ 4 ] , " sd4 " , UI_Graph_Change , 8 , UI_Color_Purplish_red , 15 , 2 , 270 , 600 , " stop " ) ;
break ;
}
UICharRefresh ( & referee_recv_info - > referee_id , UI_State_dyn [ 4 ] ) ;
_Interactive_data - > Referee_Interactive_Flag . lid _flag = 0 ;
_Interactive_data - > Referee_Interactive_Flag . loader _flag = 0 ;
}
// power
if ( _Interactive_data - > Referee_Interactive_Flag . Power_flag = = 1 )
@@ -292,4 +307,16 @@ static void UIChangeCheck(Referee_Interactive_info_t *_Interactive_data)
_Interactive_data - > Referee_Interactive_Flag . Power_flag = 1 ;
_Interactive_data - > Chassis_last_Power_Data . chassis_power_mx = _Interactive_data - > Chassis_Power_Data . chassis_power_mx ;
}
if ( _Interactive_data - > vision_mode ! = _Interactive_data - > vision_last_mode )
{
_Interactive_data - > Referee_Interactive_Flag . vision_flag = 1 ;
_Interactive_data - > vision_last_mode = _Interactive_data - > vision_mode ;
}
if ( _Interactive_data - > loader_mode ! = _Interactive_data - > loader_last_mode )
{
_Interactive_data - > Referee_Interactive_Flag . loader_flag = 1 ;
_Interactive_data - > loader_last_mode = _Interactive_data - > loader_mode ;
}
}