Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
solution:-
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<string.h>
void Initiate_State_Machine();
void Gear_down();
void Checking_Before_TakeOFF_delay_3s();
void Raising_Gear();
void Gear_up();
void Checking_before_landing();
void Lowering_gear();
typedef enum
{
GEAR_DOWN,
CHECKING_BEFORE_TAKEOFF_DELAY_3S,
RAISING_GEAR,
GEAR_UP,
CHECKING_BEFORE_LANDING,
LOWERING_GEAR
}State_Types;
typedef enum
{
open, // value 0
close // value 1
}Switch;
typedef enum
{
raising, //value 0
falling, //value 1
up, //value 2
down //value 3
}pilot_Lever;
typedef enum
{
Working,
Not_working
}Hydralic;
static volatile Switch limit_switch,squat_switch;
static volatile pilot_Lever pil;
static volatile Hydralic operation;
State_Types current_state;
typedef struct
{
char* currentstate;
char* lightvalue;
char* directionValve;
char* Hydraliccontrol;
}state;
static void(*state1[])(void)={Gear_down,Checking_Before_TakeOFF_delay_3s,Raising_Gear,Gear_up,Checking_before_landing,Lowering_gear};
state state_machine[6]={{"GearDown", "Green", "Down", "Enabled"},
{"Checkingbeforetakeoff", "Green","Down", "Enabled"},
{"Raising Gear", "Red", "Up", "Enabled"},
{"Gearup", "off", "Null", "Disabled"},
{"Checking before landing", "Red","Down", "Enabled"},
{"Loweringgear", "Green", "Down", "Enabled"}};
int main()
{
Initiate_State_Machine();
while(1)
{
state1[current_state]();
}
}
void Initiate_State_Machine()
{
current_state = GEAR_DOWN;
printf("The Finite State Machine is Initialized and current the program is in"
"GEARDOWN State & Light is: %s\n",state_machine[current_state].lightvalue);
}
void Gear_down()
{
current_state=GEAR_DOWN;
printf("Enter the values of pil and Squatswitch: ");
fflush(stdout);
scanf("%d %d",&pil,&squat_switch);
if(pil==raising && squat_switch==close)
{
current_state=CHECKING_BEFORE_TAKEOFF_DELAY_3S;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
}
else
{
Gear_down();
}
}
void Checking_Before_TakeOFF_delay_3s()
{
current_state= CHECKING_BEFORE_TAKEOFF_DELAY_3S;
printf("\nEnter the values of pil and Squatswitch and operation");
fflush(stdout);
scanf("%d %d %d",&pil,&squat_switch,&operation);
if(pil==falling && squat_switch==close)
{
current_state=GEAR_DOWN;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
if(pil==raising && operation==Working)
{
current_state=RAISING_GEAR;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
else
{
Checking_Before_TakeOFF_delay_3s();
}
}
void Raising_Gear()
{
current_state=RAISING_GEAR;
printf("\nEnter the values of pil and limit_switch");
fflush(stdout);
scanf("%d %d",&pil,&limit_switch);
if(pil==falling && limit_switch == open)
{
current_state=CHECKING_BEFORE_LANDING;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
if(pil==up &&limit_switch==close)
{
current_state=GEAR_UP;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
else
{
Raising_Gear();
}
}
void Gear_up()
{
current_state=GEAR_UP;
printf("\nEnter the values of pil ");
fflush(stdout);
scanf("%d",&pil);
if(pil==falling)
{
current_state=CHECKING_BEFORE_LANDING;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
else
{
Gear_up();
}
}
void Checking_before_landing()
{
current_state=CHECKING_BEFORE_LANDING;
printf("\nEnter the values of pil and operation");
fflush(stdout);
scanf("%d %d",&pil,&operation);
if(pil==falling || operation==Not_working)
{
current_state=LOWERING_GEAR;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
else
{
Checking_before_landing();
}
}
void Lowering_gear()
{
current_state=LOWERING_GEAR;
printf("\nEnter the values of pil and limit_switch");
fflush(stdout);
scanf("%d %d",&pil,&limit_switch);
if(pil == down && limit_switch==open)
{
current_state=GEAR_DOWN;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
if(pil==raising && limit_switch == close)
{
current_state=CHECKING_BEFORE_TAKEOFF_DELAY_3S;
printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
}
else
{
Lowering_gear();
}
}
output:-
The Finite State Machine is Initialized and current the program is inGEARDOWN State & Light is: Green
Enter the values of pil and Squatswitch: 0
1
status of currentstate is Checkingbeforetakeoff
status of lightvalue is Green
Enter the values of pil and Squatswitch and operation0
1
0
status of currentstate is Raising Gear
status of lightvalue is Red
status of directionValve is Up
status of Hydraliccontrol is Enabled
Enter the values of pil and limit_switch