From 2dffcf04f0a8763513066663c32210c04f7ade35 Mon Sep 17 00:00:00 2001 From: bmy <2583236812@qq.com> Date: Fri, 22 Dec 2023 15:24:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=99=80=E8=9E=BA=E4=BB=AA=E7=9A=84=E5=88=9D?= =?UTF-8?q?=E7=BA=A7=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/by_imu.c | 26 ++++++++++++++ app/by_imu.h | 15 ++++++++ app/by_pt_button.c | 35 +++++++++++++++--- app/by_pt_button.h | 4 ++- app/isr.c | 4 ++- app/main.c | 50 +++++++++++++------------- libraries/zf_device/zf_device_ips200.h | 8 ++--- 7 files changed, 106 insertions(+), 36 deletions(-) create mode 100644 app/by_imu.c create mode 100644 app/by_imu.h diff --git a/app/by_imu.c b/app/by_imu.c new file mode 100644 index 0000000..11f945a --- /dev/null +++ b/app/by_imu.c @@ -0,0 +1,26 @@ +#include "by_imu.h" +#include "zf_common_headfile.h" + +float imu_acc_x; +float imu_acc_y; +float imu_acc_z; +float imu_gyro_x; +float imu_gyro_y; +float imu_gyro_z; + +void by_imu_data_get(void) +{ + imu660ra_get_acc(); + imu660ra_get_gyro(); + imu660ra_get_temperature(); + + imu_acc_x = imu660ra_acc_transition(imu660ra_acc_x); + imu_acc_y = imu660ra_acc_transition(imu660ra_acc_y); + imu_acc_z = imu660ra_acc_transition(imu660ra_acc_z); + + imu_gyro_x = imu660ra_gyro_transition(imu660ra_gyro_x); + imu_gyro_y = imu660ra_gyro_transition(imu660ra_gyro_y); + imu_gyro_z = imu660ra_gyro_transition(imu660ra_gyro_z); + + +} diff --git a/app/by_imu.h b/app/by_imu.h new file mode 100644 index 0000000..0e81a20 --- /dev/null +++ b/app/by_imu.h @@ -0,0 +1,15 @@ +#ifndef _BY_IMU_H__ +#define _BY_IMU_H__ + +#include "stdio.h" +#include "ch32v30x.h" + +extern float imu_acc_x; +extern float imu_acc_y; +extern float imu_acc_z; +extern float imu_gyro_x; +extern float imu_gyro_y; +extern float imu_gyro_z; + +extern void by_imu_data_get(void); +#endif \ No newline at end of file diff --git a/app/by_pt_button.c b/app/by_pt_button.c index fc0a5ce..97f5ab1 100644 --- a/app/by_pt_button.c +++ b/app/by_pt_button.c @@ -1,6 +1,8 @@ #include "by_pt_button.h" #include "zf_common_headfile.h" +#include "by_imu.h" uint8_t potate_button; + void by_gpio_init(void) { gpio_init(E10, GPI, GPIO_HIGH, GPI_PULL_UP); @@ -21,7 +23,32 @@ uint8_t by_get_pb_statu(void) void by_ips_show(void) { - ips114_show_string(0, 0, "button statu:"); - ips114_show_uint(104, 0, by_get_pb_statu(), 1); - -} \ No newline at end of file + ips200_show_string(0, 0, "button statu:"); + // ips200_show_uint(104, 0, by_get_pb_statu(), 1); + switch (by_get_pb_statu()) { + case 1: + ips200_show_string(104, 0, "press"); + break; + case 2: + ips200_show_string(104, 0, "up "); + break; + case 3: + ips200_show_string(104, 0, "down "); + break; + + default: + ips200_show_string(104, 0, " "); + break; + } + // 鎸夐挳 + ips200_show_string(0, 16, "imu:"); + ips200_show_float(46, 16, imu_acc_x, 2, 2); + ips200_show_float(106, 16, imu_acc_y, 2, 2); + ips200_show_float(166, 16, imu_acc_z, 2, 2); + ips200_show_float(46, 32, imu_gyro_x, 2, 2); + ips200_show_float(106, 32, imu_gyro_y, 2, 2); + ips200_show_float(166, 32, imu_gyro_z, 2, 2); + ips200_show_float(46, 48, imu660ra_temperature, 2, 2); + printf("%d,%d,%d\n",(int16_t)(imu_gyro_x*10),(int16_t)(imu_gyro_y*10),(int16_t)(imu_gyro_z*10)); + +} diff --git a/app/by_pt_button.h b/app/by_pt_button.h index 4e0ded1..0a7202f 100644 --- a/app/by_pt_button.h +++ b/app/by_pt_button.h @@ -8,8 +8,10 @@ #define POTATE_BUTTOM_BACKWARD 3 extern uint8_t potate_button; + extern void by_exit_init(void); extern void by_gpio_init(void); -extern uint8_t by_get_pb_statu(void); +extern uint8_t by_get_statu(void); extern void by_ips_show(void); + #endif \ No newline at end of file diff --git a/app/isr.c b/app/isr.c index 33f643e..e502d42 100644 --- a/app/isr.c +++ b/app/isr.c @@ -198,10 +198,11 @@ void EXTI9_5_IRQHandler(void) EXTI_ClearITPendingBit(EXTI_Line9); if (SET == gpio_get_level(E10)) { potate_button = POTATE_BUTTOM_BACKWARD; + } else { potate_button = POTATE_BUTTOM_FOREWARD; - + } } } @@ -222,6 +223,7 @@ void EXTI15_10_IRQHandler(void) system_delay_us(200); if (SET == !gpio_get_level(E11)) { potate_button = POTATE_BUTTOM_PRESS; + } } if (SET == EXTI_GetITStatus(EXTI_Line12)) { diff --git a/app/main.c b/app/main.c index e9e33be..58bca7f 100644 --- a/app/main.c +++ b/app/main.c @@ -37,9 +37,10 @@ #include "cw_servo.h" #include "by_pt_button.h" #include "by_fan_control.h" +#include "by_imu.h" uint8 (*Img_Gray)[MT9V03X_W]; // 定义指向包含 MT9V03X_W 列的 uint8 类型的二维数组的指针 -//uint8 *mt9v03x_image_copy[0]; // 定义指向 uint8 类型的一维数组的指针 +// uint8 *mt9v03x_image_copy[0]; // 定义指向 uint8 类型的一维数组的指针 sint32 pts_left[PT_MAXLEN][2], pts_right[PT_MAXLEN][2]; sint32 pts_left_count, pts_right_count; float32 pts_inv_l[PT_MAXLEN][2], pts_inv_r[PT_MAXLEN][2]; @@ -51,8 +52,7 @@ sint32 pts_resample_left_count, pts_resample_right_count; float32 mid_left[PT_MAXLEN][2], mid_right[PT_MAXLEN][2]; sint32 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; @@ -66,7 +66,7 @@ int angle_left_num, angle_right_num; // L角点 int Lpt0_rpts0s_id, Lpt1_rpts1s_id; bool Lpt0_found, Lpt1_found; -int Lpt1[2],Lpt0[2]; +int Lpt1[2], Lpt0[2]; int Lpt_in0_rpts0s_id, Lpt_in1_rpts1s_id; bool Lpt_in0_found, Lpt_in1_found; @@ -85,44 +85,43 @@ float aim_distance; enum track_type_e track_type = TRACK_RIGHT; - int frame_count = 0; void img_processing(); void get_corners(); - int main(void) { clock_init(SYSTEM_CLOCK_120M); // 初始化芯片时钟 工作频率为 120MHz debug_init(); // 务必保留,本函数用于初始化MPU 时钟 调试串口 - mt9v03x_init(); - ips114_init(); + // mt9v03x_init(); + ips200_init(IPS200_TYPE_SPI); by_gpio_init(); by_exit_init(); by_pwm_init(); cw_servo_init(); + while (imu660ra_init()) + ; while (1) { - //while (frame_count < 20) { - // if (mt9v03x_finish_flag) { - // memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); - // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 8); - // //threshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, MT9V03X_W, MT9V03X_H, 110); - // ips114_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); - // mt9v03x_finish_flag = 0; - // frame_count++; - // } + // while (frame_count < 20) { + // if (mt9v03x_finish_flag) { + // memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); + // adaptiveThreshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, 188, 120, 7, 8); + // //threshold((uint8_t*)mt9v03x_image_copy, (uint8_t*)mt9v03x_image_copy, MT9V03X_W, MT9V03X_H, 110); + // ips114_show_gray_image(0, 0, mt9v03x_image_copy[0], MT9V03X_W, MT9V03X_H, MT9V03X_W, MT9V03X_H, 0); + // mt9v03x_finish_flag = 0; + // frame_count++; + // } //} if (mt9v03x_finish_flag) { - //ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); - memcpy(mt9v03x_image_copy[0], mt9v03x_image[0],(sizeof(mt9v03x_image_copy)/sizeof(uint8_t))); - //Img_Gray = mt9v03x_image; - //mt9v03x_image_copy[0] = Img_Gray[0]; + // ips114_show_gray_image(0, 0, mt9v03x_image[0], 188, 120, 188, 120,0); + memcpy(mt9v03x_image_copy[0], mt9v03x_image[0], (sizeof(mt9v03x_image_copy) / sizeof(uint8_t))); + // Img_Gray = mt9v03x_image; + // mt9v03x_image_copy[0] = Img_Gray[0]; mt9v03x_finish_flag = 0; - state_type = COMMON_STATE; img_processing(); @@ -137,10 +136,9 @@ int main(void) ElementRun(); MidLineTrack(); - - } - - + by_imu_data_get(); + by_ips_show(); + system_delay_ms(200); } } \ No newline at end of file diff --git a/libraries/zf_device/zf_device_ips200.h b/libraries/zf_device/zf_device_ips200.h index 8a4c04d..090b71a 100644 --- a/libraries/zf_device/zf_device_ips200.h +++ b/libraries/zf_device/zf_device_ips200.h @@ -85,10 +85,10 @@ #endif // 濡傛灉浣跨敤鐨勬槸鍗曟帓鎺掗拡鐨勪袱瀵稿睆骞 SPI 椹卞姩鎺у埗寮曡剼 鍙互淇敼 -#define IPS200_RST_PIN_SPI (B7 ) // 娑叉櫠澶嶄綅寮曡剼瀹氫箟 -#define IPS200_DC_PIN_SPI (D7 ) // 娑叉櫠鍛戒护浣嶅紩鑴氬畾涔 -#define IPS200_CS_PIN_SPI (D4 ) -#define IPS200_BLk_PIN_SPI (D0 ) +#define IPS200_RST_PIN_SPI (D8 ) // 娑叉櫠澶嶄綅寮曡剼瀹氫箟 +#define IPS200_DC_PIN_SPI (D9 ) // 娑叉櫠鍛戒护浣嶅紩鑴氬畾涔 +#define IPS200_CS_PIN_SPI (D10 ) +#define IPS200_BLk_PIN_SPI (D11 ) // --------------------鍗曟帓涓ゅ灞忓箷SPI鎺ュ彛寮曡剼瀹氫箟--------------------//