#include "app_line_seek.h" #include "line_seek.h" #include "main.h" #include "motor.h" #include "path_plan.h" #include "syscalls.h" // #define LOW_SPEED 30 // #define MID_SPEED 35 // #define HIGH_SPEED 40 #define LOW_SPEED 25 #define MID_SPEED 30 #define HIGH_SPEED 35 void App_LineSeek(void) { int LineL1 = 1, LineL2 = 1, LineR1 = 1, LineR2 = 1; LineSeek_GetStatus(&LineL1, &LineL2, &LineR1, &LineR2); // 获取黑线检测状态 LineSeek_GetStatusStr(); printf("%s\n", LineSeek_Status); // return; if (LineSeek_Equals("0000")) // 丁字(十字)路口 { buzzer(1); // 根据规划的路径进行决断 switch (GetNextDirection()) { case STRAIGHT: MOTOR_SetDuty(HIGH_SPEED, HIGH_SPEED); // 直走 break; case LEFT: MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 左转 break; case RIGHT: MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 右转 break; default: MOTOR_Stop(); break; } } else { buzzer(0); } if (LineSeek_Equals("1000")) // 右直角 { MOTOR_SetDuty(HIGH_SPEED, -HIGH_SPEED); // 右旋 // HAL_Delay(80); } else if (LineSeek_Equals("0001")) // 左直角 { MOTOR_SetDuty(-HIGH_SPEED, HIGH_SPEED); // 左旋; // HAL_Delay(80); } else if (LineSeek_Equals("0xx1")) // 左最外侧检测(锐角) { MOTOR_SetDuty(-HIGH_SPEED, MID_SPEED); // 左旋 // HAL_Delay(80); } else if (LineSeek_Equals("1xx0")) // 右最外侧检测(锐角) { MOTOR_SetDuty(MID_SPEED, -HIGH_SPEED); // 右旋 // HAL_Delay(80); } else if (LineSeek_Equals("x01x")) // 中间黑线上的传感器微调车左转 { MOTOR_SetDuty(0, LOW_SPEED); // 左转 } else if (LineSeek_Equals("x10x")) // 中间黑线上的传感器微调车右转 { MOTOR_SetDuty(LOW_SPEED, 0); // 右转 } else if (LineSeek_Equals("x00x")) // 都是黑色, 加速前进 { MOTOR_SetDuty(MID_SPEED, MID_SPEED); // 直走 } }