Car/App/Src/app_bus.c

98 lines
2.5 KiB
C
Raw Normal View History

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>
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();
}