2024-07-20 10:44:59 +08:00
|
|
|
|
#include "app_bus.h"
|
|
|
|
|
|
|
|
|
|
#include "app_line_seek.h"
|
|
|
|
|
#include "block_detect.h"
|
|
|
|
|
#include "buzzer.h"
|
|
|
|
|
#include "led.h"
|
|
|
|
|
#include "line_seek.h"
|
|
|
|
|
#include "motor.h"
|
|
|
|
|
#include "path_plan.h"
|
|
|
|
|
#include "syn6288.h"
|
|
|
|
|
|
|
|
|
|
typedef enum
|
|
|
|
|
{
|
|
|
|
|
RUNNING, // <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>Ӫ
|
|
|
|
|
READY_TO_PARK, // <><D7BC><EFBFBD><EFBFBD>վͣ<D5BE><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>
|
|
|
|
|
PARKING, // <20><>վͣ<D5BE><CDA3>
|
|
|
|
|
WAIT_PASSENGER, // <20>Ⱥ<EFBFBD><C8BA>˿<EFBFBD>
|
2024-07-21 08:13:13 +08:00
|
|
|
|
EXIT_STATION, // <20><>վ
|
2024-07-20 10:44:59 +08:00
|
|
|
|
STOP // ͣ<><CDA3>
|
|
|
|
|
} BusState;
|
|
|
|
|
|
2024-07-21 08:13:13 +08:00
|
|
|
|
#define MIN_CROSS_TIME 10
|
2024-07-20 10:44:59 +08:00
|
|
|
|
static BusState state;
|
2024-07-21 08:13:13 +08:00
|
|
|
|
static cross_time;
|
2024-07-20 10:44:59 +08:00
|
|
|
|
|
|
|
|
|
static int current_station;
|
|
|
|
|
char* stations[] = {"̫ƽվ", "<EFBFBD><EFBFBD><EFBFBD>Ͻ<EFBFBD><EFBFBD><EFBFBD>վ", "<EFBFBD><EFBFBD>ҵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>վ", "<EFBFBD>յ<EFBFBD>վ"};
|
|
|
|
|
|
|
|
|
|
void App_Bus(void)
|
|
|
|
|
{
|
|
|
|
|
// printf("bus_state:%d\n", state);
|
|
|
|
|
|
|
|
|
|
LineSeek_GetStatusStr();
|
|
|
|
|
|
|
|
|
|
switch (state)
|
|
|
|
|
{
|
|
|
|
|
case RUNNING: // <20><>·<EFBFBD><C2B7><EFBFBD><EFBFBD>Ӫ
|
|
|
|
|
{
|
|
|
|
|
if (Has_Block(FRONT)) // ǰ<><C7B0><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0>ͣ<EFA3AC><CDA3>
|
|
|
|
|
{
|
|
|
|
|
state = STOP;
|
|
|
|
|
}
|
|
|
|
|
else if (Has_Block(RIGHT_FRONT)) // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFA3AC><D7BC>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
state = READY_TO_PARK;
|
|
|
|
|
// state = WAIT_PASSENGER;
|
|
|
|
|
}
|
|
|
|
|
else if (Has_Block(LEFT_FRONT)) // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0><EFBFBD><EFA3AC>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
Direction nextDirs[] = {RIGHT, RIGHT};
|
|
|
|
|
ReplacePathStep(nextDirs, 2);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case READY_TO_PARK: // <><D7BC><EFBFBD><EFBFBD>վͣ<D5BE><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
if (LineSeek_Equals("0xxx")) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>ת
|
|
|
|
|
{
|
|
|
|
|
Direction nextDirs[] = {LEFT, LEFT};
|
|
|
|
|
ReplacePathStep(nextDirs, 2);
|
|
|
|
|
state = RUNNING;
|
|
|
|
|
}
|
2024-07-21 08:13:13 +08:00
|
|
|
|
else if (LineSeek_Equals("xxx0")) // <20>ҷ<EFBFBD><D2B7><EFBFBD>·<EFBFBD>ߣ<EFBFBD>Ҫȷ<D2AA><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û·<C3BB>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>վ
|
2024-07-20 10:44:59 +08:00
|
|
|
|
{
|
2024-07-21 08:13:13 +08:00
|
|
|
|
Direction nextDirs[] = {RIGHT};
|
|
|
|
|
ReplacePathStep(nextDirs, 1);
|
|
|
|
|
cross_time = 0;
|
2024-07-20 10:44:59 +08:00
|
|
|
|
state = PARKING;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case PARKING: // <20><>վͣ<D5BE><CDA3>
|
|
|
|
|
{
|
2024-07-21 08:13:13 +08:00
|
|
|
|
if (LineSeek_Equals("0000")) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>ת
|
|
|
|
|
{
|
|
|
|
|
Direction nextDirs[] = {LEFT, LEFT};
|
|
|
|
|
ReplacePathStep(nextDirs, 2);
|
|
|
|
|
state = RUNNING;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Has_Block(RIGHT_FRONT)) // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0>ͣ<EFA3AC><CDA3>
|
2024-07-20 10:44:59 +08:00
|
|
|
|
{
|
|
|
|
|
state = WAIT_PASSENGER;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case WAIT_PASSENGER: // <20>Ⱥ<EFBFBD><C8BA>˿<EFBFBD>
|
|
|
|
|
{
|
|
|
|
|
// TODO: <20><><EFBFBD>ӳ˿͵ȴ<CDB5><C8B4><EFBFBD>
|
|
|
|
|
LineSeek_Stop();
|
|
|
|
|
SYN_FrameInfo(0, stations[current_station]);
|
|
|
|
|
MOTOR_Stop();
|
2024-07-21 08:13:13 +08:00
|
|
|
|
LED_StartNTimes(5, 400, 200, 0, 255, 255);
|
|
|
|
|
HAL_Delay(2000);
|
2024-07-20 10:44:59 +08:00
|
|
|
|
current_station++;
|
2024-07-21 08:13:13 +08:00
|
|
|
|
state = EXIT_STATION;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case EXIT_STATION: // <20><>վ
|
|
|
|
|
{
|
|
|
|
|
LineSeek_Start();
|
|
|
|
|
if (LineSeek_Equals("xxx0")) // <20>ҷ<EFBFBD><D2B7><EFBFBD>·<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>ת<EFBFBD><D7AA>վ
|
|
|
|
|
{
|
|
|
|
|
Direction nextDirs[] = {RIGHT};
|
|
|
|
|
ReplacePathStep(nextDirs, 1);
|
|
|
|
|
state = RUNNING;
|
|
|
|
|
}
|
2024-07-20 10:44:59 +08:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
case STOP: // ͣ<><CDA3>
|
|
|
|
|
{
|
|
|
|
|
LineSeek_Stop();
|
2024-07-21 08:13:13 +08:00
|
|
|
|
BUZZER_StartNTimes(10, 1000, 500);
|
|
|
|
|
LED_StartNTimes(10, 1000, 500, 255, 0, 0);
|
2024-07-20 10:44:59 +08:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
App_LineSeek();
|
|
|
|
|
}
|