From 06004e9e0b2ded7ad3c7c0a8b54868873c869038 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=95=E6=98=8E=E6=B1=9F?= <246462502@qq.com> Date: Mon, 12 Aug 2024 18:08:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=8F=91=E8=BD=A6?= =?UTF-8?q?=E5=92=8C=E5=81=9C=E8=BD=A6=E8=8F=9C=E5=8D=95=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=81=9C=E8=BD=A6=E7=9B=B8=E5=85=B3=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E5=BC=80=E5=85=B3=E5=8A=9F=E8=83=BD=20pref:=20=E5=BC=AF?= =?UTF-8?q?=E9=81=93=E9=80=9F=E5=BA=A6=E6=8E=A7=E5=88=B6=E4=B8=80=E6=AC=A1?= =?UTF-8?q?=E5=87=BD=E6=95=B0->=E4=BA=8C=E6=AC=A1=E5=87=BD=E6=95=B0=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E5=9B=BE=E5=83=8F=E4=B8=8B=E5=8F=91=E6=97=A0?= =?UTF-8?q?=E6=84=8F=E4=B9=89=E7=9A=840=E7=8A=B6=E6=80=81=20fix:=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=8B=E4=BD=8D=E6=9C=BA=E5=A4=9A=E6=AC=A1?= =?UTF-8?q?=E5=A4=8D=E4=BD=8D=E6=89=8D=E8=83=BD=E8=A7=A6=E5=8F=91=E4=B8=8A?= =?UTF-8?q?=E4=BD=8D=E6=9C=BA=E5=A4=8D=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jj_blueteeth.c | 38 ++++++---- app/jj_blueteeth.h | 1 + app/jj_motion.c | 113 +++++++++++++++--------------- app/jj_motion.h | 7 +- app/jj_param.c | 18 ++--- app/jj_param.h | 8 ++- app/main.c | 2 +- app/page/page.c | 2 + app/page/page.h | 3 + app/page/page_dparam.c | 10 +-- app/page/page_gocar.c | 120 ++++++++++++++++++++++++++++++++ app/page/page_menu.c | 27 +------- app/page/page_param_pid3.c | 2 +- app/page/page_stopcar.c | 137 +++++++++++++++++++++++++++++++++++++ 14 files changed, 378 insertions(+), 110 deletions(-) create mode 100644 app/page/page_gocar.c create mode 100644 app/page/page_stopcar.c diff --git a/app/jj_blueteeth.c b/app/jj_blueteeth.c index 97b786a..be584bc 100644 --- a/app/jj_blueteeth.c +++ b/app/jj_blueteeth.c @@ -4,15 +4,15 @@ bool bt_rx_flag = false; uint8_t bt_buffer; // 接收字符存入 uint8_t bt_run_flag = 0; -uint8_t bt_fly_flag = 0; -uint32_t bt_run = 0; -float bt_fly = 160.f; +uint8_t bt_fly_flag = 0; +uint32_t bt_run = 0; +float bt_fly = 160.f; enum bt_order { Fly_ctrl = 0x01, // 起飞转换 Fly_up = 0x02, // 起飞程度增加 Fly_dowm = 0x03, // 起飞程度减小 - Speed_up = 0x04, // 加速 - Speed_down = 0x05, // 减速 + fly_close = 0x04, // 加速 + run_close = 0x05, // 全关 Speed_ctrl = 0x06, // 速度开关 Reset, }; @@ -34,10 +34,21 @@ void jj_bt_run() if (bt_rx_flag) { switch (bt_buffer) { case Fly_ctrl: - bt_fly_flag = !bt_fly_flag; + + if (go_cnt == 0) { + go_cnt = 1; + bt_fly_flag = 1; + } + else if (go_cnt == 1) { + go_cnt = 0; + } + break; case Speed_ctrl: - bt_run_flag = !bt_run_flag; + if (go_cnt == 1) { + go_cnt = 2; + } + break; case Fly_up: bt_fly += 10; @@ -45,11 +56,13 @@ void jj_bt_run() case Fly_dowm: bt_fly -= 10; break; - case Speed_up: - bt_run += 50; + case run_close: + bt_run_flag = 0; + go_cnt = 0; break; - case Speed_down: - bt_run -= 50; + case fly_close: + bt_fly_flag = 0; + go_cnt = 0; break; case Reset: NVIC_SystemReset(); @@ -70,8 +83,7 @@ void bt_printf(const char *format, ...) va_end(args); for (uint16_t i = 0; i < strlen(sbuf); i++) { - while (USART_GetFlagStatus((USART_TypeDef *)uart_index[UART_7], USART_FLAG_TC) == RESET) - ; + while (USART_GetFlagStatus((USART_TypeDef *)uart_index[UART_7], USART_FLAG_TC) == RESET); USART_SendData((USART_TypeDef *)uart_index[UART_7], sbuf[i]); } } \ No newline at end of file diff --git a/app/jj_blueteeth.h b/app/jj_blueteeth.h index 95b4816..7338348 100644 --- a/app/jj_blueteeth.h +++ b/app/jj_blueteeth.h @@ -13,6 +13,7 @@ extern bool bt_rx_flag; extern uint8_t bt_buffer; // 接收字符存入 extern uint8_t bt_run_flag; extern uint8_t bt_fly_flag; +extern uint8_t bt_ce_flag; extern uint32_t bt_run; extern float bt_fly; diff --git a/app/jj_motion.c b/app/jj_motion.c index 73d1fda..894f03c 100644 --- a/app/jj_motion.c +++ b/app/jj_motion.c @@ -86,23 +86,23 @@ float in_speed; float out_speed; float last_angle; float set_speed; -float set_speed0 = 657.0f; -float set_speed1 = 1111.0f; -float set_speed2 = 815.f; -float set_speed3 = 666.f; -float set_speed4 = 720.f; -int cnt1 = 0; -int cnt2 = 0; -int cnt3 = 0; // -int cnt4 = 0; // -int cnt5 = 0; -int cnt6 = 0; // -int cnt7 = 0; -int cnt8 = 0; -int cnt9 = 0; // -int cnt10 = 0; // -int if_start = 0; -float shock_stop = 0; +float set_speed0 = 657.0f; +float set_speed1 = 1111.0f; +float set_speed2 = 815.f; +float set_speed3 = 666.f; +float set_speed4 = 720.f; +int cnt1 = 0; +int cnt2 = 0; +int cnt3 = 0; +int cnt4 = 0; // +int cnt5 = 0; +int cnt6 = 0; // +int cnt7 = 0; +int cnt8 = 0; +int cnt9 = 0; // +int cnt10 = 0; // +int if_start = 0; + uint8_t in_state = 0; uint8_t in_stop = 0; uint8_t last_state = 0; @@ -111,12 +111,14 @@ int32_t pwm_duty_ls; int32_t pwm_duty_rs; int32_t pwm_duty_lb; int32_t pwm_duty_rb; -int32_t stop_cnt = 0; -int32_t last_lb = 0; -int32_t last_rb = 0; -float start_dis = 0; -int32_t game_over_flag = 0; // 任务结束 -uint8_t go_flag = 0; +int32_t stop_cnt = 0; +int32_t last_lb = 0; +int32_t last_rb = 0; +float start_dis = 0; +uint8_t go_cnt = 0;//0 停车 1 测试侧向风扇 2 启动 3成功运行 +float bug_sw = 0; +float out_sw = 0; +float sho_sw = 0; /* 0:无状态 1:弯道 @@ -154,33 +156,36 @@ void sport_motion() in_gyro = imu660ra_gyro_z; ////////////////////////////////////////停车任务/////////////////////////////////////////////// - // 抖动停车 - if (imu660ra_acc_z <= 800) { + // 抖动停车,计次50 + if (imu660ra_acc_z <= 900) { cnt7++; } else { cnt7 = 0; } - if (cnt7 >= 50 && ((uint32_t)shock_stop == 1 || (uint32_t)shock_stop == 2)) { + if (cnt7 >= 10 && (uint8_t)sho_sw == 1) { bt_fly_flag = bt_run_flag = 0; bt_printf("up"); + go_cnt = 0; } // 異常值停车 - if (fabs(in_angle - last_angle) > 45.f && ((uint32_t)shock_stop == 1 || (uint32_t)shock_stop == 3)) { + if (fabs(in_angle - last_angle) > 45.f && (uint8_t)bug_sw == 1) { bt_fly_flag = bt_run_flag = 0; bt_printf("bug"); + go_cnt = 0; } - // 斑马线停车,摄像头识别 + // 斑马线停车,摄像头识别,屏蔽发车前的十秒钟 if (1 == in_stop && if_start == 1) { stop_flag = 1; } if (stop_flag == 1) { bt_printf("finish"); bt_fly_flag = bt_run_flag = 0; - game_over_flag = 1; + go_cnt = 0; } // 出界停车,已经积分路过斑马线,保证斑马线不会触发 - if (2 == in_stop && start_dis >= 1) { + if (2 == in_stop && (start_dis >= 1 || bt_run_flag == 0) && (uint8_t)out_sw == 1) { bt_printf("out"); + go_cnt = 0; bt_fly_flag = bt_run_flag = 0; } @@ -189,15 +194,17 @@ void sport_motion() cnt1++; cnt2++; cnt5++; + // 斑马线积分,系数随便给的 + start_dis += in_speed * 0.000001; if (if_start == 0) { cnt8++; - start_dis += in_speed * 0.000001; // 斑马线积分 + if (cnt8 >= 5000) { if_start = 1; } } // pid参数切换 - if ((last_state != in_state) && (in_state == 0 || in_state == 2)) { // 直道 + if ((last_state != in_state) && (in_state == 2)) { // 直道 bt_printf("to 直道"); set_speed = set_speed1; @@ -232,9 +239,9 @@ void sport_motion() } if (in_state == 1) { - set_speed = set_speed0 - fabs(rate_K * myclip_f(in_pos, -100.f, 100.f)); + set_speed = set_speed0 - fabs(rate_K * powf(myclip_f(in_pos, -50.f, 50.f), 2)); } - + // 记录上一次状态 last_state = in_state; // pid计算 if (cnt1 >= 2) { @@ -278,28 +285,26 @@ void sport_motion() by_pwm_power_duty(0, 0, 0, 0); } ///////////////////////////////////////////////////* 升力风扇设置 */ ///////////////////////////////////////////////////////////////////////////////////////////////// - if (bt_fly_flag == 0) { - if (game_over_flag == 0) { - by_pwm_update_duty(500, 500); - } else { - by_pwm_update_duty(700, 700); + if (bt_fly_flag == 1) { + by_pwm_update_duty(bt_fly + 500, bt_fly + 500); + if (bt_run_flag == 0) { + // 测试状态 + if (go_cnt == 1) { + by_pwm_power_duty(550, 550, 3000, 3000); + } + else if (2 == go_cnt) { + by_pwm_power_duty(550, 550, 4000, 4000); + cnt3++; + if(cnt3>=2000) + { + bt_run_flag=1; + go_cnt=3; + cnt3=0; + } + } } - } else { - if (in_state == 1) { - by_pwm_update_duty(bt_fly + 500 + in_pos, bt_fly + 500 + in_pos); - } else { - by_pwm_update_duty(bt_fly + 500, bt_fly + 500); - } - - // 防止起步拉满 - if (bt_run_flag == 0&&go_flag==1) { - by_pwm_power_duty(550, 550, 3000, 3000); - } - else if(bt_run_flag == 0&&go_flag==2) - { - by_pwm_power_duty(550, 550, 4000, 4000); - } + by_pwm_update_duty(500, 500); } } diff --git a/app/jj_motion.h b/app/jj_motion.h index 044fd50..d796b93 100644 --- a/app/jj_motion.h +++ b/app/jj_motion.h @@ -57,17 +57,20 @@ extern float set_speed2; extern float set_speed3; extern float set_speed; extern float set_speed4; -extern float shock_stop; extern float last_angle; extern float yuc_Kp; extern float rate_K; +extern float start_dis; extern int32_t pwm_duty_ls; extern int32_t pwm_duty_rs; extern int32_t pwm_duty_lb; extern int32_t pwm_duty_rb; -extern uint8_t go_flag; +extern uint8_t go_cnt; extern uint8_t in_state; extern uint8_t in_stop; +extern float bug_sw; +extern float out_sw; +extern float sho_sw; void sport_pid_init(); void sport_motion(void); #endif \ No newline at end of file diff --git a/app/jj_param.c b/app/jj_param.c index 746cc67..c6df060 100644 --- a/app/jj_param.c +++ b/app/jj_param.c @@ -17,9 +17,9 @@ TYPE_UNION temp_frame_param[20]; void jj_param_eeprom_init(void) { soft_iic_init(&eeprom_param, K24C02_DEV_ADDR, K24C02_SOFT_IIC_DELAY, K24C02_SCL_PIN, K24C02_SDA_PIN); // eeprom初始化 -//////////////////////////////////////////////////////////////////////// - PARAM_REG(angle_Kp0, &an_Kp0, EFLOAT, 1, "an_P0:"); // 注冊 - PARAM_REG(angle_Ki0, &an_Ki0, EFLOAT, 1, "an_I0:"); // 注冊 + //////////////////////////////////////////////////////////////////////// + PARAM_REG(angle_Kp0, &an_Kp0, EFLOAT, 1, "an_P0:"); // 注冊 + PARAM_REG(angle_Ki0, &an_Ki0, EFLOAT, 1, "an_I0:"); // 注冊 PARAM_REG(angle_Kd0, &an_Kd0, EFLOAT, 1, "an_D0:"); PARAM_REG(gyro_Kp0, &gy_Kp0, EFLOAT, 1, "gy_P0:"); // 注冊 @@ -33,7 +33,7 @@ void jj_param_eeprom_init(void) PARAM_REG(fly_pwm, &bt_fly, EFLOAT, 1, "fly:"); PARAM_REG(param_set_speed0, &set_speed0, EFLOAT, 1, "rate0:"); -///////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////// PARAM_REG(angle_Kp1, &an_Kp1, EFLOAT, 1, "an_P1:"); // 注冊 PARAM_REG(angle_Ki1, &an_Ki1, EFLOAT, 1, "an_I1:"); // 注冊 PARAM_REG(angle_Kd1, &an_Kd1, EFLOAT, 1, "an_D1:"); @@ -47,7 +47,7 @@ void jj_param_eeprom_init(void) PARAM_REG(pos_Kd1, &po_Kd1, EFLOAT, 1, "po_D1:"); PARAM_REG(param_set_speed1, &set_speed1, EFLOAT, 1, "rate1:"); -///////////////////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////// PARAM_REG(yuan_Kp0, &yu_Kp0, EFLOAT, 1, "an_P0:"); // 注冊 PARAM_REG(yuan_Ki0, &yu_Ki0, EFLOAT, 1, "an_I0:"); // 注冊 PARAM_REG(yuan_Kd0, &yu_Kd0, EFLOAT, 1, "an_D0:"); @@ -63,7 +63,7 @@ void jj_param_eeprom_init(void) PARAM_REG(param_set_speed2, &set_speed2, EFLOAT, 1, "rate2:"); PARAM_REG(param_set_speed3, &set_speed3, EFLOAT, 1, "rate3:"); ///////////////////////////////////////////////////////////// - PARAM_REG(zhan_Kp, &za_Kp, EFLOAT, 1, "an_P:"); // 注冊 + PARAM_REG(zhan_Kp, &za_Kp, EFLOAT, 1, "an_P:"); // 注冊 PARAM_REG(zhan_Ki, &za_Ki, EFLOAT, 1, "an_I:"); // 注冊 PARAM_REG(zhan_Kd, &za_Kd, EFLOAT, 1, "an_D:"); @@ -76,8 +76,10 @@ void jj_param_eeprom_init(void) PARAM_REG(zhpo_Kd, &zp_Kd, EFLOAT, 1, "po_D1:"); PARAM_REG(param_set_speed4, &set_speed4, EFLOAT, 1, "rate4:"); - - PARAM_REG(shock, &shock_stop, EFLOAT, 1, "shock:"); + + PARAM_REG(bug_stop, &bug_sw, EFLOAT, 1, "bug:"); // 注冊 + PARAM_REG(out_stop, &out_sw, EFLOAT, 1, "out:"); // 注冊 + PARAM_REG(shock_stop, &sho_sw, EFLOAT, 1, "shock:"); jj_param_read(); // 注冊 } /** diff --git a/app/jj_param.h b/app/jj_param.h index 2d892ab..c3ea9be 100644 --- a/app/jj_param.h +++ b/app/jj_param.h @@ -76,9 +76,13 @@ typedef enum { zhpo_Ki, zhpo_Kd, - shock, - param_set_speed4, + + Page5_head, + bug_stop = Page5_head, + shock_stop, + out_stop, + DATA_IN_FLASH_NUM, delta_x, diff --git a/app/main.c b/app/main.c index 2280a53..7f08924 100644 --- a/app/main.c +++ b/app/main.c @@ -45,7 +45,7 @@ int main(void) system_delay_init(); debug_init(); by_frame_init(); - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 6; i++) { by_frame_send(&send_reset); } encoder_quad_init(TIM3_ENCOEDER, TIM3_ENCOEDER_MAP3_CH1_C6, TIM3_ENCOEDER_MAP3_CH2_C7); diff --git a/app/page/page.c b/app/page/page.c index 82f3ed2..0f28dfb 100644 --- a/app/page/page.c +++ b/app/page/page.c @@ -130,6 +130,8 @@ void Page_Init(void) PAGE_REG(page_param_pid2); PAGE_REG(page_param_pid3); PAGE_REG(page_dparam); + PAGE_REG(page_gocar); + PAGE_REG(page_stopcar); Page_Shift(page_menu); pagelist[now_page].SetupCallback(); // 先构建一遍 diff --git a/app/page/page.h b/app/page/page.h index 697f378..858fe44 100644 --- a/app/page/page.h +++ b/app/page/page.h @@ -25,6 +25,9 @@ enum PageID { page_param_pid2, page_param_pid3, page_dparam, + page_stopcar, + page_gocar, + // page_argv, // page_sys, // page_run, diff --git a/app/page/page_dparam.c b/app/page/page_dparam.c index d47b182..ab0aaff 100644 --- a/app/page/page_dparam.c +++ b/app/page/page_dparam.c @@ -2,7 +2,7 @@ #include "page_ui_widget.h" #include "jj_motion.h" #include "page.h" -#include"jj_voltage.h" +#include "jj_voltage.h" #include #define LINE_HEAD 0 @@ -61,9 +61,11 @@ static void Loop() ips200_show_string(0, 160, "outpos"); ips200_show_float(80, 160, out_pos, 4, 1); ips200_show_string(0, 180, "vol"); - ips200_show_float(80, 180, (float)now_vol, 4,2); - ips200_show_string(0, 200, "setsp"); - ips200_show_float(80, 200, set_speed, 4,2); + ips200_show_float(80, 180, (float)now_vol, 4, 2); + ips200_show_string(0, 200, "setsp"); + ips200_show_float(80, 200, set_speed, 4, 2); + ips200_show_string(0, 220, "dis"); + ips200_show_float(80, 220, start_dis, 4, 2); ips200_show_string(180, 0, "ls"); ips200_show_float(220, 0, pwm_duty_ls, 4, 1); diff --git a/app/page/page_gocar.c b/app/page/page_gocar.c new file mode 100644 index 0000000..b39dabd --- /dev/null +++ b/app/page/page_gocar.c @@ -0,0 +1,120 @@ +#include "zf_common_headfile.h" +#include "page_ui_widget.h" +#include "page.h" +#include "by_frame.h" +#include "jj_blueteeth.h" +#include "jj_motion.h" + +#define LINE_HEAD 1 +#define LINE_END 6 + +static char Text[] = "gocar"; + +static int8_t Curser = LINE_HEAD; // 定义光标位置 +static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +static int8_t last_go = 0; +static int8_t last_cnt = 0; +static int8_t last_fly = 0; +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ + +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + + ips200_clear(); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + ips200_show_string(10, 200, "go_flag:"); + ips200_show_int(80, 200, go_cnt, 1); + ips200_show_string(10, 180, "ru_flag:"); + ips200_show_int(80, 180, bt_run_flag, 1); + ips200_show_string(10, 160, "fl_flag:"); + ips200_show_int(80, 160, bt_fly_flag, 1); + ips200_show_string(10, 18, "fan_test"); + ips200_show_string(10, 2 * 18, "run"); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ + if (last_cnt != go_cnt) { + ips200_show_int(80, 200, go_cnt, 1); + } + last_cnt = go_cnt; + if (last_go != bt_run_flag) { + ips200_show_int(80, 180, bt_run_flag, 1); + } + last_go = bt_run_flag; + if (last_fly != bt_fly_flag) { + ips200_show_int(80, 160, bt_fly_flag, 1); + } + last_fly = bt_fly_flag; +} + +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + Curser_Last = Curser; + + if (page_event_forward == event) { + Curser--; // 光标上移 + } else if (page_event_backward == event) { + Curser++; // 光标下移 + } else if (page_event_press_short == event) { + if (go_cnt == 1 && Curser == 1) { + go_cnt = 0; // 起步拖动失败。重新开始 + } else if (go_cnt == 0 && Curser == 1) { + go_cnt = 1; + bt_fly_flag = 1; + } + if (go_cnt == 1 && Curser == 2) { + go_cnt = 2; + } + + } else if (page_event_press_long == event) { + Page_Shift(page_menu); + } + + if (Curser < LINE_HEAD) { + Curser = LINE_END; + } else if (Curser > LINE_END) { + Curser = LINE_HEAD; + } + + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); +} + +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_gocar(unsigned char pageID) +{ + Page_Register(pageID, Text, Setup, Loop, Exit, Event); +} diff --git a/app/page/page_menu.c b/app/page/page_menu.c index 1377b6e..aed6047 100644 --- a/app/page/page_menu.c +++ b/app/page/page_menu.c @@ -6,15 +6,13 @@ #include "jj_motion.h" #define LINE_HEAD 1 -#define LINE_END 5 +#define LINE_END 7 static char Text[] = "Menu"; static int8_t Curser = LINE_HEAD; // 定义光标位置 static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 -uint32_t cnt = 0; -uint32_t reset[3]; static void Print_Menu_p(void); /*************************************************************************************** * @@ -29,10 +27,10 @@ static void Print_Menu_p(void); */ static void Setup() { + ips200_clear(); Print_Menu_p(); Print_Curser(Curser, Curser_Last, RGB565_PURPLE); - reset[0] = 0x01; } /** @@ -51,15 +49,6 @@ static void Exit() */ static void Loop() { - ips200_show_string(0, 200, "go_flag:"); - ips200_show_int(180, 200, go_flag, 2); - if (go_flag == 1) { - bt_fly_flag = 1; - - } else if (go_flag == 2) { - system_delay_ms(2000); - bt_run_flag = 1; - } } /** @@ -81,18 +70,6 @@ static void Event(page_event event) Page_Shift(Curser); // 切换到光标选中的页面 } } else if (page_event_press_long == event) { - if (go_flag == 0) { - go_flag = 1; - } else if (go_flag == 1) { - go_flag = 2; - } - - // uint32_t temp = 0x5c; - // for (int i = 0; i < 3; i++) { - // by_frame_send(&temp); - // } - - // ips200_clear(); } if (Curser < LINE_HEAD) { diff --git a/app/page/page_param_pid3.c b/app/page/page_param_pid3.c index 5ad97a1..4b4d20c 100644 --- a/app/page/page_param_pid3.c +++ b/app/page/page_param_pid3.c @@ -5,7 +5,7 @@ #include #define LINE_HEAD 1 -#define LINE_END DATA_IN_FLASH_NUM - Page4_head +#define LINE_END Page5_head - Page4_head #define Strat_param Page4_head static char Text[] = "barr_pid"; static int event_flag = 0; diff --git a/app/page/page_stopcar.c b/app/page/page_stopcar.c new file mode 100644 index 0000000..371cca1 --- /dev/null +++ b/app/page/page_stopcar.c @@ -0,0 +1,137 @@ +#include "jj_param.h" +#include "page_ui_widget.h" +#include "jj_motion.h" +#include "page.h" +#include + +#define LINE_HEAD 1 +#define LINE_END DATA_IN_FLASH_NUM - Page5_head +#define Strat_param Page5_head +static char Text[] = "stop_sw"; +static int event_flag = 0; +static int index_power = 0; +static int8_t Curser = LINE_HEAD; // 定义光标位置 +static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 +static void jj_param_show(); +/*************************************************************************************** + * + * 以下为页面模板函数 + * + ***************************************************************************************/ +/** + * @brief 页面初始化事件 + * @param 无 + * @retval 无 + */ +static void Setup() +{ + ips200_clear(); + ips200_show_string(0, 2,"barrir"); + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + for (int16 i = 0; i < LINE_END; i++) { + ips200_show_string(0, i * 18 + 20, Param_Data[i +Strat_param ].text); + if (Param_Data[i + Strat_param].type == EINT32) + ips200_show_int(50, i * 18 + 20, *((int32 *)(Param_Data[i + Strat_param].p_data)), 5); + else if (Param_Data[i + Strat_param].type == EFLOAT) + ips200_show_float(50, i * 18 + 20, *((float *)(Param_Data[i + Strat_param].p_data)), 4, 5); + } + ips200_show_int(100, 2, index_power, 5); +} + +/** + * @brief 页面退出事件 + * @param 无 + * @retval 无 + */ +static void Exit() +{ +} + +/** + * @brief 页面循环执行的内容 + * @param 无 + * @retval 无 + */ +static void Loop() +{ +} +/** + * @brief 页面事件 + * @param btn:发出事件的按键 + * @param event:事件编号 + * @retval 无 + */ +static void Event(page_event event) +{ + + if (0 == event_flag) { + + Curser_Last = Curser; + if (page_event_forward == event) { + Curser--; // 光标上移 + } else if (page_event_backward == event) { + Curser++; // 光标下移 + } else if (page_event_press_short == event) { + event_flag = 1; // 选中参数 + Print_Curser(Curser, Curser_Last, RGB565_RED); + return; + } else if (page_event_press_long == event) { + jj_param_write(); + sport_pid_init(); + Page_Shift(page_menu); + return; + } + if (Curser < LINE_HEAD) { + Curser = LINE_END; + } else if (Curser > LINE_END) { + Curser = LINE_HEAD; + } + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } else if (1 == event_flag) { + if (page_event_forward == event) { + if (Param_Data[Curser + Strat_param-1].type == EFLOAT) { + *((float *)(Param_Data[Curser + Strat_param-1].p_data)) += powf(10.0f, (float)index_power); + } else if (Param_Data[Curser + Strat_param-1].type == EINT32) { + *((int32 *)(Param_Data[Curser + Strat_param-1].p_data)) += 1; + } else if (Param_Data[Curser + Strat_param-1].type == EUINT32) { + *((uint32 *)(Param_Data[Curser + Strat_param-1].p_data)) += 1; + } + } else if (page_event_backward == event) { + if (Param_Data[Curser + Strat_param-1].type == EFLOAT) { + *((float *)(Param_Data[Curser + Strat_param-1].p_data)) -= powf(10.0f, (float)index_power); + } else if (Param_Data[Curser + Strat_param-1].type == EINT32) { + *((int32 *)(Param_Data[Curser + Strat_param-1].p_data)) -= 1; + } else if (Param_Data[Curser + Strat_param-1].type == EUINT32) { + *((uint32 *)(Param_Data[Curser + Strat_param-1].p_data)) -= 1; + } + } else if (page_event_press_short == event) { + index_power++; + if (index_power > 2) { + index_power = -2; + } + ips200_show_int(100, 2, index_power, 5); + } else if (page_event_press_long == event) { + event_flag = 0; + Print_Curser(Curser, Curser_Last, RGB565_PURPLE); + } + jj_param_show(); + } +} +static void jj_param_show() +{ + if (EINT32 == Param_Data[Curser + Strat_param-1].type) + ips200_show_int(50, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + Strat_param-1].p_data)), 5); + else if (EUINT32 == Param_Data[Curser + Strat_param-1].type) + ips200_show_uint(50, Curser * 18 + 2, *((int32 *)(Param_Data[Curser + Strat_param-1].p_data)), 5); + else if (EFLOAT == Param_Data[Curser + Strat_param-1].type) + ips200_show_float(50, Curser * 18 + 2, *((float *)(Param_Data[Curser + Strat_param-1].p_data)), 4, 5); +} +/** + * @brief 页面注册函数 + * + * @param pageID + */ +void PageRegister_page_stopcar(unsigned char pageID) +{ + Page_Register(pageID, Text, Setup, Loop, Exit, Event); +}