Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
#include
#include
typedef enum
{
Geardown,
CheckTakeoff,
RaisingGear,
Gearup,
CheckLanding,
LoweringGear
}State_Type;
typedef enum
{
Lever_Down_Squat_Closed,
Lever_Falling_Limit_Open,
Lever_Raising_Squat_Open,
Lever_Up_Limit_Closed
}LeverSwitch_Input;
typedef struct
{
int delay;
char* plane[4];
State_Type state[4];
char* currentstate[4];
char* LED[4];
}Gear;
Gear fsm[6]=
{
{5,{"AirplaneTakingoff","AirplaneGrounded_Parked","AirplaneTakingoff","AirplaneTakingoff"},{CheckTakeoff,Geardown,CheckTakeoff,CheckTakeoff},{"CHECKTAKEOFF","GEARDOWN","CHECKTAKEOFF","CHECKTAKEOFF"},{"RED","GREEN","RED","RED"}},
{5,{"AirplaneTakingoff","AirplaneGrounded_Parked","AirplaneTakingoff","AirplaneTakingoff"},{RaisingGear,Geardown,RaisingGear,RaisingGear},{"RAISING GEAR","GEARDOWN","RAISING GEAR","RAISING GEAR"},{"RED","GREEN","RED","RED"}},
{5,{"AirplaneLanding","AirplaneLanding","AirplaneAirborne","AirplaneAirborne"},{CheckLanding,CheckLanding,Gearup,Gearup},{"CHECKLANDING","CHECKLANDING","GEARUP","GEARUP"},{"RED","RED","OFF","OFF"}},
{5,{"AirplaneLanding","AirplaneLanding","AirplaneAirborne","AirplaneAirborne"},{CheckLanding,CheckLanding,Gearup,Gearup},{"CHECKLANDING","CHECKLANDING","GEARUP","GEARUP"},{"RED","RED","OFF","OFF"}},
{5,{"AirplaneLanding","AirplaneLanding","AirplaneTakingoff","AirplaneAirborne"},{LoweringGear,LoweringGear,RaisingGear,Gearup},{"LOWERINGGEAR","LOWERINGGEAR","RAISINGGEAR","GEARUP"},{"RED","RED","RED","OFF"}},
{5,{"AirplaneLanding","AirplaneLanding","AirplaneTakingoff","AirplaneLanding"},{Geardown,Geardown,CheckTakeoff,CheckLanding},{"GEARDOWN","GEARDOWN","CHECKTAKEOFF","CHECKLANDING"},{"GREEN","GREEN","RED","RED"}}
};
LeverSwitch_Input input;
int current_state;
int lever_state,limit_state,squat_state;
int main()
{
current_state = Geardown;
while(1)
{
printf("\nEnter the Lever,Limit and Squat switch state:");
scanf("%d %d %d",&lever_state,&limit_state,&squat_state);
if (lever_state == 0 && limit_state == 0 && squat_state == 0)
{
input = Lever_Down_Squat_Closed;
printf("\nCurrent Status:%s",fsm[current_state].currentstate[input]);
printf("\nColor of the LED:%s",fsm[current_state].LED[input]);
current_state = fsm[current_state].state[input];
}
else if(lever_state == 0 && limit_state == 0 && squat_state == 1)
{
input = Lever_Falling_Limit_Open;
printf("\nCurrent Status:%s",fsm[current_state].currentstate[input]);
printf("\nColor of the LED:%s",fsm[current_state].LED[input]);
current_state = fsm[current_state].state[input];
}
else if(lever_state == 1 && limit_state == 0 && squat_state == 0)
{
input = Lever_Raising_Squat_Open;
printf("\nCurrent Status:%s",fsm[current_state].currentstate[input]);
printf("\nColor of the LED:%s",fsm[current_state].LED[input]);
current_state = fsm[current_state].state[input];
}
else if(lever_state == 1 && limit_state == 1 && squat_state == 1)
{
input = Lever_Up_Limit_Closed;
printf("\nCurrent Status:%s",fsm[current_state].currentstate[input]);
printf("\nColor of the LED:%s",fsm[current_state].LED[input]);
current_state = fsm[current_state].state[input];
}
printf("\nPlease wait for %d Second",fsm[current_state].delay);
printf("\nAirplane Status:%s",fsm[current_state].plane[input]);
}
}