Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
#include
#include
void Gear_Down(void);
void Checking_Before_Take_Off(void);
void Raising_Gear(void);
void Gear_Up(void);
void Checking_Before_Landing(void);
void Lowering_Gear(void);
typedef enum
{
GEAR_DOWN,
CHECKING_BEFORE_TAKE_OFF,
RAISING_GEAR,
GEAR_UP,
CHECKING_BEFORE_LANDING,
LOWERING_GEAR
}State_type;
typedef enum
{
OFF,
ON
}Switch;
typedef enum
{
RAISING,
FALLING,
UP,
DOWN
}Pilot_lever;
typedef enum
{
WORKING,
NOT_WORKING
}Hydraulic_mechanism;
static volatile Switch Squat_Switch;
static volatile Switch Limit_Switch;
static volatile Pilot_lever PL;
static volatile Hydraulic_mechanism HM;
State_type Current_state;
typedef struct
{
char* Currentstate;
char* Light;
char* Direction_valve;
char* Hydraulic_control;
}State;
static void(*State_Table[])(void)={Gear_Down,Checking_Before_Take_Off,Raising_Gear,Gear_Up,Checking_Before_Landing,Lowering_Gear};
static State State_Machine[6]={
{"Gear Down","Green","Down","Enabled"},
{"Checking Before Take Off","Green","Down","Enabled"},
{"Raising Gear","Red","Up","Enabled"},
{"Gear Up","off","Null","Disabled"},
{"Checking Before Landing","Red","Down","Enabled"},
{"Lowering Gear","Green","Down","Enabled"}
};
int main()
{
Current_state = GEAR_DOWN;
while(1)
{
State_Table[Current_state]();
}
return 0;
}
Gear_Down()
{
Current_state = GEAR_DOWN;
printf("\nCURRENT STATE IS GEAR DOWN:");
printf("\nEnter the Pilot lever and Squat_Switch Values:");
fflush(stdout);
scanf("%d %d",&PL,&Squat_Switch);
if((PL==RAISING)&&(Squat_Switch==ON))
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Gear_Down();
}
}
Checking_Before_Take_Off()
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nEnter the Pilot lever, Squat_Switch and Hydraulic_mechanism Values:");
fflush(stdout);
scanf("%d %d %d",&PL,&Squat_Switch,&HM);
if((PL==FALLING)&&(Squat_Switch==OFF))
{
Current_state = GEAR_DOWN;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if((PL==UP)&&(HM==WORKING))
{
Current_state = RAISING_GEAR;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Checking_Before_Take_Off();
}
}
Raising_Gear()
{
Current_state = RAISING_GEAR;
printf("\nEnter the Pilot lever,Limit_Switch Values:");
fflush(stdout);
scanf("%d %d",&PL,&Limit_Switch);
if(PL==FALLING)
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if(Limit_Switch==OFF)
{
Current_state = GEAR_UP;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Raising_Gear();
}
}
Gear_Up()
{
Current_state = GEAR_UP;
printf("\nEnter the Pilot lever Values:");
fflush(stdout);
scanf("%d",&PL);
if(PL==FALLING)
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Gear_Up();
}
}
Checking_Before_Landing()
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nEnter the Pilot lever and Hydraulic_mechanism Values:");
fflush(stdout);
scanf("%d%d",&PL,&HM);
if((PL==DOWN)||(HM==NOT_WORKING))
{
Current_state = LOWERING_GEAR;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Checking_Before_Landing();
}
}
Lowering_Gear()
{
Current_state = LOWERING_GEAR;
printf("\nEnter the Pilot lever and Limit Switch Values:");
fflush(stdout);
scanf("%d%d",&PL,&Limit_Switch);
if((Limit_Switch==ON))
{
Current_state = GEAR_DOWN;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if(PL==RAISING)
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Lowering_Gear();
}
}