98 lines
2.5 KiB
C
98 lines
2.5 KiB
C
|
#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>
|
|||
|
STOP // ͣ<><CDA3>
|
|||
|
} BusState;
|
|||
|
|
|||
|
static BusState state;
|
|||
|
|
|||
|
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>Ӫ
|
|||
|
{
|
|||
|
LineSeek_Start();
|
|||
|
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;
|
|||
|
}
|
|||
|
else if (LineSeek_Equals("xxx0")) // <20>ҷ<EFBFBD><D2B7><EFBFBD>·<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD>ת<EFBFBD><D7AA>վ
|
|||
|
{
|
|||
|
Direction nextDirs[] = {RIGHT, RIGHT};
|
|||
|
ReplacePathStep(nextDirs, 2);
|
|||
|
state = PARKING;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
case PARKING: // <20><>վͣ<D5BE><CDA3>
|
|||
|
{
|
|||
|
if (Has_Block(RIGHT_FRONT)) // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><CFB0>ͣ<EFA3AC><CDA3>
|
|||
|
{
|
|||
|
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]);
|
|||
|
BUZZER_StartNTimes(3, 500, 500);
|
|||
|
MOTOR_Stop();
|
|||
|
HAL_Delay(5000);
|
|||
|
current_station++;
|
|||
|
state = RUNNING;
|
|||
|
break;
|
|||
|
}
|
|||
|
case STOP: // ͣ<><CDA3>
|
|||
|
{
|
|||
|
LineSeek_Stop();
|
|||
|
break;
|
|||
|
}
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
App_LineSeek();
|
|||
|
}
|