From 8f0a04b9623e4cc6a8a3d7649de8be72ef273325 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 6 Jan 2024 16:22:49 +0800 Subject: [PATCH 1/4] =?UTF-8?q?pref:=20=E6=95=B4=E7=90=86=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=96=87=E4=BB=B6=E5=92=8C=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/cw_servo.c | 17 ------ app/cw_servo.h | 20 ------- app/gl_common.h | 44 +++++++-------- app/gl_data.c | 62 +++++++++++++++++++++ app/gl_data.h | 74 ++++++++++++++++++++++++++ app/gl_headfile.h | 5 +- app/gl_state.h | 30 ++++++----- app/gl_tracking.c | 4 +- app/main.c | 67 +---------------------- app/main.h | 45 ---------------- app/page/cw_page_ui_widget.c | 2 +- libraries/zf_device/zf_device_ips200.h | 4 +- 12 files changed, 181 insertions(+), 193 deletions(-) delete mode 100644 app/cw_servo.c delete mode 100644 app/cw_servo.h create mode 100644 app/gl_data.c create mode 100644 app/gl_data.h diff --git a/app/cw_servo.c b/app/cw_servo.c deleted file mode 100644 index f8132e0..0000000 --- a/app/cw_servo.c +++ /dev/null @@ -1,17 +0,0 @@ -#include "zf_common_headfile.h" -#include "cw_servo.h" - -void cw_servo_init(void) -{ - pwm_init(SERVO_L_PWM_CHANNEL, 50, 1000); - pwm_init(SERVO_R_PWM_CHANNEL, 50, 1000); -} - -void cw_servo_set_angle(float servo_l_angle, float servo_r_angle) -{ - uint32_t servo_l_duty_s = (uint32_t)(servo_l_angle * SERVO_L_DUTY_PER_ANGLE); - uint32_t servo_r_duty_s = (uint32_t)(servo_r_angle * SERVO_R_DUTY_PER_ANGLE); - - pwm_set_duty(SERVO_L_PWM_CHANNEL, servo_l_duty_s); - pwm_set_duty(SERVO_R_PWM_CHANNEL, servo_r_duty_s); -} diff --git a/app/cw_servo.h b/app/cw_servo.h deleted file mode 100644 index eddec90..0000000 --- a/app/cw_servo.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef _CW_SERVO_H__ -#define _CW_SERVO_H__ - -#include "zf_common_headfile.h" - -#define SERVO_L_PWM_CHANNEL TIM2_PWM_MAP0_CH1_A0 -#define SERVO_R_PWM_CHANNEL TIM2_PWM_MAP0_CH2_A1 - -#define SERVO_MAX_ANGLE_RANGE (90.0F) -#define SERVO_L_DUTY_MAX (1100.0F) -#define SERVO_L_DUTY_MIN (900.0F) -#define SERVO_R_DUTY_MAX (1100.0F) -#define SERVO_R_DUTY_MIN (900.0F) -#define SERVO_L_DUTY_PER_ANGLE ((SERVO_L_DUTY_MAX - SERVO_L_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE) -#define SERVO_R_DUTY_PER_ANGLE ((SERVO_R_DUTY_MAX - SERVO_R_DUTY_MIN) / SERVO_MAX_ANGLE_RANGE) - -extern void cw_servo_init(void); -extern void cw_servo_set_angle(float servo_l_angle, float servo_r_angle); - -#endif diff --git a/app/gl_common.h b/app/gl_common.h index 1cfda26..6698b8f 100644 --- a/app/gl_common.h +++ b/app/gl_common.h @@ -1,32 +1,28 @@ #ifndef COMMON_H_ #define COMMON_H_ - - -#define IMAGE_H (MT9V03X_H) -#define IMAGE_W (MT9V03X_W) -#define BEGINH_L (61) -#define BEGINH_R (61) -#define BEGINW_L (-18) -#define BEGINW_R (-12) -#define PT_MAXLEN (75) -#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) //获取像素点的值 -#define FIX_BINTHRESHOLD (140) //设置最开始的阈值 -#define SELFADAPT_KERNELSIZE (7) //巡线区域核大小 -#define FILTER_KERNELSIZE (7) //滤波核大小 -#define SELFADAPT_OFFSET (8) //适应性块大小 -#define PIXPERMETER (56) -#define RESAMPLEDIST (0.02) -#define ANGLEDIST (0.2) -#define ROADWIDTH (0.45) -#define FRAMENONE (1) -#define FRAMETOLEFT (5) -#define FRAMETORIGHT (5) +#define IMAGE_H (MT9V03X_H) +#define IMAGE_W (MT9V03X_W) +#define BEGINH_L (61) +#define BEGINH_R (61) +#define BEGINW_L (-18) +#define BEGINW_R (-12) +#define PT_MAXLEN (75) +#define GET_PIX_1C(IMG, H, W) (IMG[(H) * MT9V03X_W + (W)]) // 获取像素点的值 +#define FIX_BINTHRESHOLD (140) // 设置最开始的阈值 +#define SELFADAPT_KERNELSIZE (7) // 巡线区域核大小 +#define FILTER_KERNELSIZE (7) // 滤波核大小 +#define SELFADAPT_OFFSET (8) // 适应性块大小 +#define PIXPERMETER (56) +#define RESAMPLEDIST (0.02f) +#define ANGLEDIST (0.2f) +#define ROADWIDTH (0.45f) +#define FRAMENONE (1) +#define FRAMETOLEFT (5) +#define FRAMETORIGHT (5) int32_t limit(int32_t x, int32_t low, int32_t up); int clip(int x, int low, int up); -float fclip(float x, float low, float up) ; - - +float fclip(float x, float low, float up); #endif /* COMMON_H_ */ \ No newline at end of file diff --git a/app/gl_data.c b/app/gl_data.c new file mode 100644 index 0000000..766fb00 --- /dev/null +++ b/app/gl_data.c @@ -0,0 +1,62 @@ +#include "gl_data.h" + +uint8_t (*Img_Gray)[MT9V03X_W]; +int32_t pts_left[PT_MAXLEN][2]; +int32_t pts_right[PT_MAXLEN][2]; +int32_t pts_left_count; +int32_t pts_right_count; +float pts_inv_l[PT_MAXLEN][2]; +float pts_inv_r[PT_MAXLEN][2]; +int32_t pts_inv_l_count; +int32_t pts_inv_r_count; +float pts_filter_l[PT_MAXLEN][2]; +float pts_filter_r[PT_MAXLEN][2]; +int32_t pts_filter_l_count; +int32_t pts_filter_r_count; +float pts_resample_left[PT_MAXLEN][2]; +float pts_resample_right[PT_MAXLEN][2]; +int32_t pts_resample_left_count; +int32_t pts_resample_right_count; + +float mid_left[PT_MAXLEN][2]; +float mid_right[PT_MAXLEN][2]; + +int32_t mid_left_count; +int32_t mid_right_count; + +float angle_new_left[PT_MAXLEN]; +float angle_new_right[PT_MAXLEN]; +int angle_new_left_num; +int angle_new_right_num; +uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; + +float angle_left[PT_MAXLEN]; +float angle_right[PT_MAXLEN]; +int angle_left_num; +int angle_right_num; + +int Lpt0_rpts0s_id; +int Lpt1_rpts1s_id; +bool Lpt0_found; +bool Lpt1_found; +int Lpt1[2]; +int Lpt0[2]; + +int Lpt_in0_rpts0s_id; +int Lpt_in1_rpts1s_id; +bool Lpt_in0_found; +bool Lpt_in1_found; +int Lpt_in1[2]; +int Lpt_in0[2]; + +bool is_straight0; +bool is_straight1; + +bool is_turn0; +bool is_turn1; + +float rptsn[PT_MAXLEN][2]; +int32_t rptsn_num; +float aim_distance; + +track_type_e track_type = TRACK_RIGHT; \ No newline at end of file diff --git a/app/gl_data.h b/app/gl_data.h new file mode 100644 index 0000000..5915646 --- /dev/null +++ b/app/gl_data.h @@ -0,0 +1,74 @@ +#pragma once + +#ifndef _GL_DATA_H +#define _GL_DATA_H + +#include "gl_headfile.h" + +typedef enum track_type_e { + TRACK_LEFT = 0, + TRACK_RIGHT, +} track_type_e; + +extern uint8_t (*Img_Gray)[MT9V03X_W]; +extern int32_t pts_left[PT_MAXLEN][2]; +extern int32_t pts_right[PT_MAXLEN][2]; +extern int32_t pts_left_count; +extern int32_t pts_right_count; +extern float pts_inv_l[PT_MAXLEN][2]; +extern float pts_inv_r[PT_MAXLEN][2]; +extern int32_t pts_inv_l_count; +extern int32_t pts_inv_r_count; +extern float pts_filter_l[PT_MAXLEN][2]; +extern float pts_filter_r[PT_MAXLEN][2]; +extern int32_t pts_filter_l_count; +extern int32_t pts_filter_r_count; +extern float pts_resample_left[PT_MAXLEN][2]; +extern float pts_resample_right[PT_MAXLEN][2]; +extern int32_t pts_resample_left_count; +extern int32_t pts_resample_right_count; + +extern float mid_left[PT_MAXLEN][2]; +extern float mid_right[PT_MAXLEN][2]; + +extern int32_t mid_left_count; +extern int32_t mid_right_count; + +extern float angle_new_left[PT_MAXLEN]; +extern float angle_new_right[PT_MAXLEN]; +extern int angle_new_left_num; +extern int angle_new_right_num; +extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; + +extern float angle_left[PT_MAXLEN]; +extern float angle_right[PT_MAXLEN]; +extern int angle_left_num; +extern int angle_right_num; + +extern int Lpt0_rpts0s_id; +extern int Lpt1_rpts1s_id; +extern bool Lpt0_found; +extern bool Lpt1_found; +extern int Lpt1[2]; +extern int Lpt0[2]; + +extern int Lpt_in0_rpts0s_id; +extern int Lpt_in1_rpts1s_id; +extern bool Lpt_in0_found; +extern bool Lpt_in1_found; +extern int Lpt_in1[2]; +extern int Lpt_in0[2]; + +extern bool is_straight0; +extern bool is_straight1; + +extern bool is_turn0; +extern bool is_turn1; + +extern float rptsn[PT_MAXLEN][2]; +extern int32_t rptsn_num; +extern float aim_distance; + +extern track_type_e track_type; + +#endif diff --git a/app/gl_headfile.h b/app/gl_headfile.h index 11591ce..1482de7 100644 --- a/app/gl_headfile.h +++ b/app/gl_headfile.h @@ -1,8 +1,6 @@ #ifndef GL_HEADFILE #define GL_HEADFILE - - #include "gl_state.h" #include "gl_img_process.h" #include "gl_common.h" @@ -14,8 +12,7 @@ #include "gl_tracking.h" #include "gl_circle.h" #include "gl_cross.h" +#include "gl_data.h" #include "math.h" - - #endif /* STATE_H_ */ \ No newline at end of file diff --git a/app/gl_state.h b/app/gl_state.h index 5a3c29f..dc762c0 100644 --- a/app/gl_state.h +++ b/app/gl_state.h @@ -2,21 +2,27 @@ #define STATE_H_ enum state_type_e { - COMMON_STATE = 0, - CROSS_STATE,HALF_STATE, - CIRCLE_IN_STATE,CIRCLE_BEGIN_STATE, - CIRCLE_RUNNING_STATE,CIRCLE_OUT_STATE, - TURN_STATE,STRAIGHT_STATE, - BREAK_STATE,BAR_STATE, - RAMP_STATE,GARAGE_OUT_STATE, - GARAGE_IN_STATE,GARAGE_STOP_STATE, - GARAGE_PASS_STATE, + COMMON_STATE = 0, + CROSS_STATE, + HALF_STATE, + CIRCLE_IN_STATE, + CIRCLE_BEGIN_STATE, + CIRCLE_RUNNING_STATE, + CIRCLE_OUT_STATE, + TURN_STATE, + STRAIGHT_STATE, + BREAK_STATE, + BAR_STATE, + RAMP_STATE, + GARAGE_OUT_STATE, + GARAGE_IN_STATE, + GARAGE_STOP_STATE, + GARAGE_PASS_STATE, }; extern enum state_type_e state_type; -#define CROSS_AIM (0.49) -#define COMMON_AIM (0.31) - +#define CROSS_AIM (0.49f) +#define COMMON_AIM (0.31f) #endif /* STATE_H_ */ diff --git a/app/gl_tracking.c b/app/gl_tracking.c index b41eb73..41edd20 100644 --- a/app/gl_tracking.c +++ b/app/gl_tracking.c @@ -65,11 +65,11 @@ void MidLineTrack() { } } - // 车轮对应点(纯跟踪起始点) + // 车轮对应点 (纯跟踪起始点) float cx = UndistInverseMapW[(int) (IMAGE_H * 0.90f)][78]; float cy = UndistInverseMapH[(int) (IMAGE_H * 0.90f)][78]; - // 找最近点(起始点中线归一化) + // 找最近点 (起始点中线归一化) float min_dist = 1e10; int begin_id = -1; diff --git a/app/main.c b/app/main.c index 1c9efa3..975c919 100644 --- a/app/main.c +++ b/app/main.c @@ -25,94 +25,29 @@ #include "gl_headfile.h" #include "by_rt_button.h" #include "by_fan_control.h" -#include "cw_servo.h" #include "./page/cw_page.h" -uint8_t (*Img_Gray)[MT9V03X_W]; -// uint8_t *mt9v03x_image_copy[0]; -int32_t pts_left[PT_MAXLEN][2]; -int32_t pts_right[PT_MAXLEN][2]; -int32_t pts_left_count, pts_right_count; -float pts_inv_l[PT_MAXLEN][2], pts_inv_r[PT_MAXLEN][2]; -int32_t pts_inv_l_count, pts_inv_r_count; -float pts_filter_l[PT_MAXLEN][2], pts_filter_r[PT_MAXLEN][2]; -int32_t pts_filter_l_count, pts_filter_r_count; -float pts_resample_left[PT_MAXLEN][2], pts_resample_right[PT_MAXLEN][2]; -int32_t pts_resample_left_count, pts_resample_right_count; -float mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2]; -int32_t mid_left_count, mid_right_count; - -float angle_new_left[PT_MAXLEN]; -float angle_new_right[PT_MAXLEN]; -int angle_new_left_num, angle_new_right_num; -uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; - -float angle_left[PT_MAXLEN]; -float angle_right[PT_MAXLEN]; -int angle_left_num, angle_right_num; - -int Lpt0_rpts0s_id, Lpt1_rpts1s_id; -bool Lpt0_found, Lpt1_found; -int Lpt1[2], Lpt0[2]; - -int Lpt_in0_rpts0s_id, Lpt_in1_rpts1s_id; -bool Lpt_in0_found, Lpt_in1_found; -int Lpt_in1[2], Lpt_in0[2]; - -bool is_straight0, is_straight1; - -bool is_turn0, is_turn1; - -float rptsn[PT_MAXLEN][2]; -int rptsn_num; -float aim_distance; - -enum track_type_e track_type = TRACK_RIGHT; - -int frame_count = 0; - -uint16_t pwm_cnt = 500; - -void img_processing(); -void get_corners(); - int main(void) { clock_init(SYSTEM_CLOCK_120M); system_delay_init(); debug_init(); mt9v03x_init(); - pwm_init(TIM2_PWM_MAP0_CH1_A0, 50, 1000); - pwm_init(TIM2_PWM_MAP0_CH2_A1, 50, 1000); ips200_init(IPS200_TYPE_SPI); by_gpio_init(); by_exit_init(); by_pwm_init(); - // cw_servo_init(); // while (imu660ra_init()) // ; Page_Init(); while (1) { - // ips200_show_uint(0, 0, pwm_cnt, 6); - // uint8_t temp_status = by_get_rb_status(); - // if (2 == temp_status) { - // pwm_cnt += 50; - // } else if (3 == temp_status) { - // pwm_cnt -= 50; - // } - - // pwm_cnt = (uint16_t)clip(pwm_cnt, 500, 1000); - // by_pwm_update_duty(4000); - // pwm_set_duty(TIM2_PWM_MAP0_CH1_A0, pwm_cnt); - // pwm_set_duty(TIM2_PWM_MAP0_CH2_A1, pwm_cnt); - - // by_pwm_update_duty(pwm_cnt); Page_Run(); if (mt9v03x_finish_flag) { + // 该操作消耗大概 1970 个 tick,折合约 110us memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); mt9v03x_finish_flag = 0; diff --git a/app/main.h b/app/main.h index 10353da..1741eaa 100644 --- a/app/main.h +++ b/app/main.h @@ -2,50 +2,5 @@ #define MAIN_H #include "zf_common_headfile.h" -#include "gl_common.h" - -// extern uint8 *mt9v03x_image_copy[0]; -extern int32_t pts_left[PT_MAXLEN][2], pts_right[PT_MAXLEN][2]; // 0:H,1:W -extern int32_t pts_left_count, pts_right_count; -extern float pts_inv_l[PT_MAXLEN][2], pts_inv_r[PT_MAXLEN][2]; -extern int32_t pts_inv_l_count, pts_inv_r_count; -extern float pts_filter_l[PT_MAXLEN][2], pts_filter_r[PT_MAXLEN][2]; -extern int32_t pts_filter_l_count, pts_filter_r_count; -extern float pts_resample_left[PT_MAXLEN][2], pts_resample_right[PT_MAXLEN][2]; -extern int32_t pts_resample_left_count, pts_resample_right_count; -extern uint8_t mt9v03x_image_copy[MT9V03X_H][MT9V03X_W]; -extern float mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2]; -extern int32_t mid_left_count, mid_right_count; - -extern float angle_left[PT_MAXLEN]; -extern float angle_right[PT_MAXLEN]; -extern int angle_left_num, angle_right_num; - -extern float angle_new_left[PT_MAXLEN]; -extern float angle_new_right[PT_MAXLEN]; -extern int angle_new_left_num, angle_new_right_num; - -extern int Lpt0_rpts0s_id, Lpt1_rpts1s_id; -extern bool Lpt0_found, Lpt1_found; -extern int Lpt1[2], Lpt0[2]; - -extern int Lpt_in0_rpts0s_id, Lpt_in1_rpts1s_id; -extern bool Lpt_in0_found, Lpt_in1_found; -extern int Lpt_in1[2], Lpt_in0[2]; - -extern bool is_straight0, is_straight1; - -extern bool is_turn0, is_turn1; - -extern float rptsn[PT_MAXLEN][2]; -extern int rptsn_num; -extern float aim_distance; - -enum track_type_e { - TRACK_LEFT, - TRACK_RIGHT, -}; - -extern enum track_type_e track_type; #endif // MAIN_H \ No newline at end of file diff --git a/app/page/cw_page_ui_widget.c b/app/page/cw_page_ui_widget.c index 0e88602..82b82f1 100644 --- a/app/page/cw_page_ui_widget.c +++ b/app/page/cw_page_ui_widget.c @@ -1,6 +1,6 @@ #include "cw_page_ui_widget.h" #include "zf_common_headfile.h" -#include "main.h" +#include "gl_data.h" /** * @brief 绘制光标 diff --git a/libraries/zf_device/zf_device_ips200.h b/libraries/zf_device/zf_device_ips200.h index 3362ed9..96239ba 100644 --- a/libraries/zf_device/zf_device_ips200.h +++ b/libraries/zf_device/zf_device_ips200.h @@ -115,8 +115,8 @@ // --------------------双排 SPI 接口两寸屏幕引脚定义--------------------// #define IPS200_DEFAULT_DISPLAY_DIR (IPS200_PORTAIT) // 默认的显示方向 -#define IPS200_DEFAULT_PENCOLOR (RGB565_BLACK ) // 默认的画笔颜色 -#define IPS200_DEFAULT_BGCOLOR (RGB565_YELLOW ) // 默认的背景颜色 +#define IPS200_DEFAULT_PENCOLOR (RGB565_YELLOW ) // 默认的画笔颜色 +#define IPS200_DEFAULT_BGCOLOR (RGB565_BLACK ) // 默认的背景颜色 #define IPS200_DEFAULT_DISPLAY_FONT (IPS200_8X16_FONT) // 默认的字体模式 // 控制语句 From abca5d603cfff3587aac7c8c7b185ceb82a8158b Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 6 Jan 2024 16:47:15 +0800 Subject: [PATCH 2/4] =?UTF-8?q?pref:=20=E4=BC=98=E5=8C=96=E9=95=BF?= =?UTF-8?q?=E7=9F=AD=E6=8C=89=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_rt_button.h | 13 ++++++++----- app/isr.c | 24 +++++++++--------------- libraries/zf_driver/zf_driver_delay.h | 3 --- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/app/by_rt_button.h b/app/by_rt_button.h index 2b84c70..c42d6e0 100644 --- a/app/by_rt_button.h +++ b/app/by_rt_button.h @@ -4,12 +4,15 @@ #include "stdio.h" #include "ch32v30x.h" -typedef enum rotate_button_event{ +#define LONG_PRESS_THRESHOLD_MS (300ULL) +#define LONG_PRESS_THRESHOLD_TICK (LONG_PRESS_THRESHOLD_MS * 18000ULL) + +typedef enum rotate_button_event { rotate_button_press_short = 1, - rotate_button_press_long = 2, - rotate_button_forward = 3, - rotate_button_backward = 4, -}rotate_button_event; + rotate_button_press_long = 2, + rotate_button_forward = 3, + rotate_button_backward = 4, +} rotate_button_event; extern uint8_t rotate_button; diff --git a/app/isr.c b/app/isr.c index fb875c8..6e909d6 100644 --- a/app/isr.c +++ b/app/isr.c @@ -219,24 +219,18 @@ void EXTI15_10_IRQHandler(void) } if (SET == EXTI_GetITStatus(EXTI_Line11)) { static uint64_t time_via = 0; - + system_delay_ms(10); if (RESET == gpio_get_level(E11)) { - system_delay_us(200); - if (RESET == gpio_get_level(E11)) { - time_via = system_get_tick(); - } + time_via = system_get_tick(); EXTI_ClearITPendingBit(EXTI_Line11); - } else { - system_delay_us(200); - if (SET == gpio_get_level(E11)) { - time_via = system_get_tick() - time_via; - if (time_via > LONG_PRESS_THRESHOLD_TICK) { - rotate_button = rotate_button_press_long; - } else { - rotate_button = rotate_button_press_short; - } - time_via = 0; + } else if (SET == gpio_get_level(E11)) { + time_via = system_get_tick() - time_via; + if (time_via > LONG_PRESS_THRESHOLD_TICK) { + rotate_button = rotate_button_press_long; + } else { + rotate_button = rotate_button_press_short; } + time_via = 0; EXTI_ClearITPendingBit(EXTI_Line11); } if (SET == EXTI_GetITStatus(EXTI_Line12)) { diff --git a/libraries/zf_driver/zf_driver_delay.h b/libraries/zf_driver/zf_driver_delay.h index 07fb8b0..57befa7 100644 --- a/libraries/zf_driver/zf_driver_delay.h +++ b/libraries/zf_driver/zf_driver_delay.h @@ -39,9 +39,6 @@ #include "zf_common_clock.h" #include "zf_common_typedef.h" -#define LONG_PRESS_THRESHOLD_MS (300ULL) -#define LONG_PRESS_THRESHOLD_TICK (LONG_PRESS_THRESHOLD_MS * 18000ULL) - void system_delay_ms(uint32 time); void system_delay_us(uint32 time); uint64_t system_get_tick(void); From 737fc2de6b2eb6e2111c0aad99737425a10065c5 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 6 Jan 2024 17:19:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=E4=B8=BA=E9=80=89=E4=B8=AD?= =?UTF-8?q?=E9=A1=B9=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=A5=87=E6=80=AA=E7=9A=84?= =?UTF-8?q?=E5=8A=A8=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/page/cw_page_menu.c | 2 +- app/page/cw_page_rtcam.c | 14 +-- app/page/cw_page_ui_widget.c | 16 ++- libraries/zf_device/zf_device_ips200.c | 152 +++++++++++-------------- 4 files changed, 79 insertions(+), 105 deletions(-) diff --git a/app/page/cw_page_menu.c b/app/page/cw_page_menu.c index 0a85302..60f00b2 100644 --- a/app/page/cw_page_menu.c +++ b/app/page/cw_page_menu.c @@ -100,7 +100,7 @@ static void Print_Menu_p(void) // SCREEN_showstr_style(5 * 8, 0, RED, WHITE, "#### MAIN MENU ####"); ips200_show_string(0, 0, Text); for (uint8_t i = page_menu + 1; i < page_max; i++) { - ips200_show_string(10, i * 16, pagelist[i].Text); + ips200_show_string(10, i * 18, pagelist[i].Text); // SCREEN_showstr(8, i, pagelist[i].Text); } } diff --git a/app/page/cw_page_rtcam.c b/app/page/cw_page_rtcam.c index db59b3d..3b6c7b4 100644 --- a/app/page/cw_page_rtcam.c +++ b/app/page/cw_page_rtcam.c @@ -3,13 +3,12 @@ #include "cw_page.h" #define LINE_HEAD 11 -#define LINE_END 18 +#define LINE_END 16 static char Text[] = "RealTime Image"; static int8_t Curser = LINE_HEAD; // 定义光标位置 static int8_t Curser_Last = LINE_HEAD; // 定义光标位置 -static void Print_Menu_p(void); /*************************************************************************************** * * 以下为页面模板函数 @@ -24,7 +23,6 @@ static void Print_Menu_p(void); static void Setup() { ips200_clear(); - Print_Menu_p(); Print_Curser(Curser, Curser_Last); } @@ -91,13 +89,3 @@ void PageRegister_page_rtcam(unsigned char pageID) * 以下为页面自定义功能函数 * ***************************************************************************************/ - -/** - * @brief 打印菜单项 - * - */ -static void Print_Menu_p(void) -{ - // SCREEN_showstr_style(5 * 8, 0, RED, WHITE, "#### MAIN MENU ####"); - ips200_show_string(0, 0, Text); -} diff --git a/app/page/cw_page_ui_widget.c b/app/page/cw_page_ui_widget.c index 82b82f1..2ed8d22 100644 --- a/app/page/cw_page_ui_widget.c +++ b/app/page/cw_page_ui_widget.c @@ -10,8 +10,17 @@ */ void Print_Curser(uint8_t Curser_In, uint8_t Curser_Last_In) { - ips200_show_string(0, Curser_Last_In * 16, " "); - ips200_show_string(0, Curser_In * 16, ">"); + ips200_show_string(0, Curser_Last_In * 18, " "); + ips200_show_string(0, Curser_In * 18, ">"); + + for (uint8_t i = 0; i < 160; i++) { + ips200_draw_point(10 + i, Curser_Last_In * 18 + 19, IPS200_DEFAULT_BGCOLOR); + // system_delay_us(200); + } + for (uint8_t i = 0; i < 160; i++) { + ips200_draw_point(10 + i, Curser_In * 18 + 19, RGB565_WHITE); + system_delay_ms(2); + } } /** @@ -20,9 +29,8 @@ void Print_Curser(uint8_t Curser_In, uint8_t Curser_Last_In) */ void Print_Menu(const ITEM *item, uint8_t item_sum) { - ips200_show_string(0, 0, " --return--"); for (uint8_t i = 0; i < item_sum; i++) { - ips200_show_string(8, i * 16 + 16, item[i].text); + ips200_show_string(8, i * 18 + 16, item[i].text); } } diff --git a/libraries/zf_device/zf_device_ips200.c b/libraries/zf_device/zf_device_ips200.c index 3fd0c1a..fdd330b 100644 --- a/libraries/zf_device/zf_device_ips200.c +++ b/libraries/zf_device/zf_device_ips200.c @@ -316,10 +316,10 @@ static void ips200_set_region(uint16 x1, uint16 y1, uint16 x2, uint16 y2) // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 // 检查一下你的显示调用的函数 自己计算一下哪里超过了屏幕显示范围 - zf_assert(x1 < ips200_x_max); - zf_assert(y1 < ips200_y_max); - zf_assert(x2 < ips200_x_max); - zf_assert(y2 < ips200_y_max); + // zf_assert(x1 < ips200_x_max); + // zf_assert(y1 < ips200_y_max); + // zf_assert(x2 < ips200_x_max); + // zf_assert(y2 < ips200_y_max); ips200_write_command(0x2a); ips200_write_16bit_data(x1); @@ -484,8 +484,8 @@ void ips200_draw_point(uint16 x, uint16 y, const uint16 color) { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); if (IPS200_TYPE_SPI == ips200_display_type) { IPS200_CS(0); @@ -512,10 +512,10 @@ void ips200_draw_line(uint16 x_start, uint16 y_start, uint16 x_end, uint16 y_end { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x_start < ips200_x_max); - zf_assert(y_start < ips200_y_max); - zf_assert(x_end < ips200_x_max); - zf_assert(y_end < ips200_y_max); + // zf_assert(x_start < ips200_x_max); + // zf_assert(y_start < ips200_y_max); + // zf_assert(x_end < ips200_x_max); + // zf_assert(y_end < ips200_y_max); int16 x_dir = (x_start < x_end ? 1 : -1); int16 y_dir = (y_start < y_end ? 1 : -1); @@ -565,61 +565,39 @@ void ips200_show_char(uint16 x, uint16 y, const char dat) { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); uint8 i = 0, j = 0; if (IPS200_TYPE_SPI == ips200_display_type) { IPS200_CS(0); } - switch (ips200_display_font) { - case IPS200_6X8_FONT: { - uint16 display_buffer[6 * 8]; - ips200_set_region(x, y, x + 5, y + 7); - for (i = 0; 6 > i; i++) { - // 减 32 因为是取模是从空格开始取得 空格在 ascii 中序号是 32 - uint8 temp_top = ascii_font_6x8[dat - 32][i]; - for (j = 0; 8 > j; j++) { - if (temp_top & 0x01) { - display_buffer[i + j * 6] = (ips200_pencolor); - } else { - display_buffer[i + j * 6] = (ips200_bgcolor); - } - temp_top >>= 1; - } + uint16 display_buffer[8 * 16]; + ips200_set_region(x, y, x + 7, y + 15); + for (i = 0; 8 > i; i++) { + uint8 temp_top = ascii_font_8x16[dat - 32][i]; + uint8 temp_bottom = ascii_font_8x16[dat - 32][i + 8]; + for (j = 0; 8 > j; j++) { + if (temp_top & 0x01) { + display_buffer[i + j * 8] = (ips200_pencolor); + } else { + display_buffer[i + j * 8] = (ips200_bgcolor); } - ips200_write_16bit_data_array(display_buffer, 6 * 8); - } break; - case IPS200_8X16_FONT: { - uint16 display_buffer[8 * 16]; - ips200_set_region(x, y, x + 7, y + 15); - for (i = 0; 8 > i; i++) { - uint8 temp_top = ascii_font_8x16[dat - 32][i]; - uint8 temp_bottom = ascii_font_8x16[dat - 32][i + 8]; - for (j = 0; 8 > j; j++) { - if (temp_top & 0x01) { - display_buffer[i + j * 8] = (ips200_pencolor); - } else { - display_buffer[i + j * 8] = (ips200_bgcolor); - } - temp_top >>= 1; - } - for (j = 0; 8 > j; j++) { - if (temp_bottom & 0x01) { - display_buffer[i + j * 8 + 4 * 16] = (ips200_pencolor); - } else { - display_buffer[i + j * 8 + 4 * 16] = (ips200_bgcolor); - } - temp_bottom >>= 1; - } + temp_top >>= 1; + } + for (j = 0; 8 > j; j++) { + if (temp_bottom & 0x01) { + display_buffer[i + j * 8 + 4 * 16] = (ips200_pencolor); + } else { + display_buffer[i + j * 8 + 4 * 16] = (ips200_bgcolor); } - ips200_write_16bit_data_array(display_buffer, 8 * 16); - } break; - case IPS200_16X16_FONT: { - // 暂不支持 - } break; + temp_bottom >>= 1; + } + + ips200_write_16bit_data_array(display_buffer, 8 * 16); } + if (IPS200_TYPE_SPI == ips200_display_type) { IPS200_CS(1); } @@ -638,8 +616,8 @@ void ips200_show_string(uint16 x, uint16 y, const char dat[]) { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); uint16 j = 0; while ('\0' != dat[j]) { @@ -671,10 +649,10 @@ void ips200_show_int(uint16 x, uint16 y, const int32 dat, uint8 num) { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(0 < num); - zf_assert(10 >= num); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(0 < num); + // zf_assert(10 >= num); int32 dat_temp = dat; int32 offset = 1; @@ -708,10 +686,10 @@ void ips200_show_uint(uint16 x, uint16 y, const uint32 dat, uint8 num) { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(0 < num); - zf_assert(10 >= num); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(0 < num); + // zf_assert(10 >= num); uint32 dat_temp = dat; int32 offset = 1; @@ -748,12 +726,12 @@ void ips200_show_float(uint16 x, uint16 y, const double dat, uint8 num, uint8 po { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(0 < num); - zf_assert(8 >= num); - zf_assert(0 < pointnum); - zf_assert(6 >= pointnum); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(0 < num); + // zf_assert(8 >= num); + // zf_assert(0 < pointnum); + // zf_assert(6 >= pointnum); double dat_temp = dat; double offset = 1.0; @@ -790,9 +768,9 @@ void ips200_show_binary_image(uint16 x, uint16 y, const uint8 *image, uint16 wid { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(NULL != image); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(NULL != image); uint32 i = 0, j = 0; uint8 temp = 0; @@ -844,9 +822,9 @@ void ips200_show_gray_image(uint16 x, uint16 y, const uint8 *image, uint16 width { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(NULL != image); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(NULL != image); uint32 i = 0, j = 0; uint16 color = 0, temp = 0; @@ -901,9 +879,9 @@ void ips200_show_rgb565_image(uint16 x, uint16 y, const uint16 *image, uint16 wi { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(NULL != image); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(NULL != image); uint32 i = 0, j = 0; uint16 data_buffer[dis_width]; @@ -947,9 +925,9 @@ void ips200_show_wave(uint16 x, uint16 y, const uint16 *wave, uint16 width, uint { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(NULL != wave); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(NULL != wave); uint32 i = 0, j = 0; uint32 width_index = 0, value_max_index = 0; @@ -992,9 +970,9 @@ void ips200_show_chinese(uint16 x, uint16 y, uint8 size, const uint8 *chinese_bu { // 如果程序在输出了断言信息 并且提示出错位置在这里 // 那么一般是屏幕显示的时候超过屏幕分辨率范围了 - zf_assert(x < ips200_x_max); - zf_assert(y < ips200_y_max); - zf_assert(NULL != chinese_buffer); + // zf_assert(x < ips200_x_max); + // zf_assert(y < ips200_y_max); + // zf_assert(NULL != chinese_buffer); int i = 0, j = 0, k = 0; uint8 temp = 0, temp1 = 0, temp2 = 0; From 21fa49966fa5e33a2a8b3816d5443220ae26cc20 Mon Sep 17 00:00:00 2001 From: CaoWangrenbo Date: Sat, 6 Jan 2024 20:37:43 +0800 Subject: [PATCH 4/4] =?UTF-8?q?pref:=20=E4=BF=AE=E6=94=B9=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E5=8A=A8=E7=94=BB=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/page/cw_page_ui_widget.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/page/cw_page_ui_widget.c b/app/page/cw_page_ui_widget.c index 2ed8d22..594bf99 100644 --- a/app/page/cw_page_ui_widget.c +++ b/app/page/cw_page_ui_widget.c @@ -10,8 +10,8 @@ */ void Print_Curser(uint8_t Curser_In, uint8_t Curser_Last_In) { - ips200_show_string(0, Curser_Last_In * 18, " "); - ips200_show_string(0, Curser_In * 18, ">"); + // ips200_show_string(0, Curser_Last_In * 18, " "); + // ips200_show_string(0, Curser_In * 18, ">"); for (uint8_t i = 0; i < 160; i++) { ips200_draw_point(10 + i, Curser_Last_In * 18 + 19, IPS200_DEFAULT_BGCOLOR); @@ -19,7 +19,7 @@ void Print_Curser(uint8_t Curser_In, uint8_t Curser_Last_In) } for (uint8_t i = 0; i < 160; i++) { ips200_draw_point(10 + i, Curser_In * 18 + 19, RGB565_WHITE); - system_delay_ms(2); + system_delay_ms(1); } }