From fb3472b556574817f0c779a64804f77031c6d852 Mon Sep 17 00:00:00 2001 From: Kidenygood <2979564623@qq.com> Date: Wed, 19 Apr 2023 22:50:26 +0800 Subject: [PATCH] =?UTF-8?q?UI=E5=8A=A8=E6=80=81=E6=B5=8B=E8=AF=95=E5=AE=8C?= =?UTF-8?q?=E6=88=90=EF=BC=8C=E6=9C=AA=E6=8E=A5=E5=85=A5=E5=A4=96=E9=83=A8?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=EF=BC=8C=E6=9C=89=E5=B0=8F=E6=A6=82=E7=8E=87?= =?UTF-8?q?=E9=83=A8=E5=88=86=E5=88=9D=E5=A7=8B=E5=8C=96=E4=B8=8D=E6=88=90?= =?UTF-8?q?=E5=8A=9F=EF=BC=8C=E5=8F=AF=E8=83=BD=E9=9C=80=E8=A6=81=E5=A4=9A?= =?UTF-8?q?=E6=AC=A1=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/referee/referee.md | 49 ++++++++++++++++++++++++++++++++++ modules/referee/referee_UI.c | 2 +- modules/referee/referee_task.c | 1 + 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/modules/referee/referee.md b/modules/referee/referee.md index abf58c0..0bc3115 100644 --- a/modules/referee/referee.md +++ b/modules/referee/referee.md @@ -1,4 +1,53 @@ # referee +## 如何绘制你的自定义UI?以绘制超级电容能量条为例: +UI的绘制包含初始化和TASK两个部分,初始化部分在`My_UI_init`函数中,TASK部分在`My_UI_Refresh`函数中。 + +## 初始化部分: +初始化部分的UI主要有两个目的:静态UI的绘制、为动态UI的绘制做准备。 + +分析超级电容能量条功能可知,此UI包含如下: +voltage:xxx voltage为静态不变的,冒号后的xxx为变化的量。 +方框以及方框内的能量条:方框为静态不变的,能量条为变化的量。(参考游戏血条) + +因而,静态UI的绘制包含如下: +绘制字符“voltage:”、绘制矩形方框。 +为动态UI的准备如下: +绘制矩形方框内的初始能量条、绘制voltage的初始值。 + +### 绘制字符“voltage:”: +设置绘制用结构体,此处使用数组是因为需要绘制多个字符。本次绘制的字符为“voltage:”,只是用到了第6个,即xxx[5]: +```c +static String_Data_t UI_State_sta[6]; // 静态 +static String_Data_t UI_State_dyn[6]; // 动态 +``` +字符格式以及内容设置: +```c +// 底盘功率显示,静态 +Char_Draw(&UI_State_sta[5], "ss5", UI_Graph_ADD, 8, UI_Color_Green, 18, 2, 720, 210, "Voltage:"); +``` +各参数意义如下,函数定义中有详细注释: + + string String_Data类型变量指针,用于存放字符串数据 + stringname[3] 字符串名称,用于标识更改 + String_Operate 字符串操作,初始化时一般使用"UI_Graph_ADD" + String_Layer 图层0-9 + String_Color 字符串颜色 + String_Size 字号 + String_Width 字符串线宽 + Start_x、Start_y 开始坐标 + *stringdata 字符串数据 +设置完毕后,使用“Char_ReFresh”发送即可: +```c +// 底盘功率显示,静态 +Char_ReFresh(&_referee_info->referee_id, UI_State_sta[5]); +``` +### 绘制能量框: +定义一个图形类结构体,用于绘制能量框: +```c +static Graph_Data_t UI_energy_line[1]; // 电容能量条 +``` + + 若需要进行多机交互,可增加此函数: diff --git a/modules/referee/referee_UI.c b/modules/referee/referee_UI.c index d58a152..cd83ced 100644 --- a/modules/referee/referee_UI.c +++ b/modules/referee/referee_UI.c @@ -390,7 +390,7 @@ void UI_ReFresh(referee_id_t *_id, int cnt, ...) memcpy(buffer + (LEN_HEADER + LEN_CMDID + Interactive_Data_LEN_Head + UI_Operate_LEN_PerDraw * i), (uint8_t *)&graphData, UI_Operate_LEN_PerDraw); } Append_CRC16_Check_Sum(buffer, temp_datalength); - RefereeSend(buffer, temp_datalength); // 发送CRC16校验值 + RefereeSend(buffer, temp_datalength); va_end(ap); // 结束可变参数的获取 } diff --git a/modules/referee/referee_task.c b/modules/referee/referee_task.c index 123700e..8ff4694 100644 --- a/modules/referee/referee_task.c +++ b/modules/referee/referee_task.c @@ -51,6 +51,7 @@ void Referee_Interactive_task() } static Graph_Data_t UI_shoot_line[10]; // 射击准线 +static Graph_Data_t UI_energy_line[1]; // 电容能量条 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, 490, 515, 565};