Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear.
OVERVIEW OF THE PROJECT:-
In this project, controlling the retraction and extension of Airplane’s landing gear can be implemented using Finite State Machine (FSM). FSM is the most efficient algorithm which is mathematical model of computation. In this project we control the Airplane landing gear by verifying the various parameters for the safety reason. This procudure are follow for proper landing and take off.
WHAT IS FINITE STATE MACHINE:-
A finite state machine (sometimes called a finite state automaton) is a computation model that can be implemented with hardware or software and can be used to simulate sequential logic and some computer programs. Finite state automata generate regular languages. Finite state machines can be used to model problems in many fields including mathematics, artificial intelligence, games, and linguistics.

A system where particular inputs cause particular changes in state can be represented using finite state machines. This example describes the various states of a turnstile. Inserting a coin into a turnstile will unlock it, and after the turnstile has been pushed, it locks again. Inserting a coin into an unlocked turnstile, or pushing against a locked turnstile will not change its state.
GOALS:-
- Controlling the direction of Valve.
System directly control the valve and control the direction of the wheel by verifiying the other system
- Controlling the retraction and extension of Airplane’s landing gear.
Retraction and extension of Airplane is control by the lever and its check proper hight for landing or takeoff.
A direction valve is controlled by the software to allow the hydraulic pressure to either raise or lower the landing gear.
Deliverables of this project:
Implementing the control for the retraction and extension of Airplane’s landing gear using the Finite state machine with the knowledge of various states of switch and gear.
IMPLEMENTATION OF THE PROBLEM:-
To carry out the problem we need the states with their respective finctions.
Here we are using the switch states,Direction of valves with respect to gear.
PROGRAM:-
#include <stdio.h>
void Initiate_State_Machine();
void GearDown();
void CheckingBeforeTakeOFF();
void RaisingGear();
void GearUp();
void CheckBeforeLanding();
void LoweringGear();
static void(*statetable[])(void)={ GearDown, CheckingBeforeTakeOFF, RaisingGear, GearUp, CheckBeforeLanding, LoweringGear};
typedef enum State
{
GEAR_DOWN,
CHECKING_BEFORE_TAKEOFF,
RAISING_GEAR,
GEAR_UP,
CHECK_BEFORE_LANDING,
LOWERING_GEAR,
}State_Type;
typedef enum Switch
{
on,
off//plane is on groung
}Switch_status;
typedef enum pilot_lever
{
Raising,
falling
}pilot_lever;
typedef enum hydraulic_mechanism
{
working,
not_working
}hydraulic_mechanism;
static volatile Switch_status squat_switch;
static volatile Switch_status limit_switch;
static volatile pilot_lever pl;
static volatile hydraulic_mechanism hm;
State_Type current_state;
typedef struct
{
char* current_state_indication;
char* light;
char* direction_valve_status;
char* landing_gear_hydraulic_ control;
char* Gas_Pressurized_Spring_system_ status[2];
}State_Table;
static State_Table State_Machine[6]={{"GearDown", "Green","Down","Enabled",{ NULL,NULL}},
{"CheckingBeforeTakeOFF"," Green","Down","Enabled",{NULL, NULL}},
{"RaisingGear","Red","Up"," Enabled",{NULL,NULL}},
{"GearUp","Off","NULL"," Disbled",{NULL,NULL}},
{"CheckBeforeLanding","Red"," Down","Enabled",{NULL,NULL}},
{"LoweringGear","Green","Down" ,"Enabled",{"Disabled"," Enabled"}}
};
int main()
{
Initiate_State_Machine();
while(1)
{
statetable[current_state]();
}
}
void GearDown(void)
{
current_state=GEAR_DOWN;
printf("Enter the status of pilot's lever and squat switch");
fflush(stdout);
scanf("%d %d",&pl,&squat_switch);
if(pl==Raising && squat_switch==on)
{
current_state=CHECKING_BEFORE_ TAKEOFF;
printf("current state:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is :%s\n", State_Machine[current_state]. light);
}
else
{
GearDown();
}
}
//CheckingBeforeTakeOFF
void CheckingBeforeTakeOFF(void)
{
current_state=CHECKING_BEFORE_ TAKEOFF;
printf("Enter the status of pilot's lever and squat switch and hydraulic mechanism:");
fflush(stdout);
scanf("%d %d",&pl,&squat_switch,&hm);
if(pl==falling&&squat_switch== off)
{
GearDown();
}
else if(pl==Raising && squat_switch==on && hm==working)
{
current_state=RAISING_GEAR;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Status of Direction valve:%s\n",State_Machine[ current_state].direction_ valve_status);
}
else if(pl==Raising && squat_switch==on && hm==not_working)
{
current_state=RAISING_GEAR;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Status of Direction valve:%s\n",State_Machine[ current_state].direction_ valve_status);
printf("Status of gas pressurised Spring System:%s\n",State_Machine[ current_state].Gas_ Pressurized_Spring_system_ status);
}
}
//RaisingGear
void RaisingGear(void)
{
current_state=RAISING_GEAR;
printf("Enter the status of pilot's lever and limit switch:");
fflush(stdout);
scanf("%d %d",&pl,&limit_switch);
if(pl==falling && limit_switch==on)
{
current_state=CHECK_BEFORE_ LANDING;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Landing Gear Hydraulic Control:%s\n",State_Machine[ current_state].landing_gear_ hydraulic_control);
}
else if(pl==Raising && limit_switch==off)
{
current_state=GEAR_UP;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Landing Gear Hydraulic Control:%s\n",State_Machine[ current_state].landing_gear_ hydraulic_control);
}
else
{
RaisingGear();
}
}
//GearUp
void GearUp(void)
{
current_state=GEAR_UP;
printf("Enter the status of pilot's lever:");
fflush(stdout);
scanf("%d",&pl);
if(pl==falling)
{
current_state=CHECK_BEFORE_ LANDING;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Landing Gear Hydraulic Control:%s\n",State_Machine[ current_state].landing_gear_ hydraulic_control);
}
else
{
GearUp();
}
}
//CheckBeforeLanding
void CheckBeforeLanding(void)
{
current_state=CHECK_BEFORE_ LANDING;
printf("Enter the status of pilot's lever and hydraulic mechanism status:");
fflush(stdout);
scanf("%d %d",&pl,&hm);
if(pl==falling && hm==working)
{
current_state=LOWERING_GEAR;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Status of Direction valve:%s\n",State_Machine[ current_state].direction_ valve_status);
}
else if(pl==falling && hm==not_working)
{
current_state=LOWERING_GEAR;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Status of Direction valve:%s\n",State_Machine[ current_state].direction_ valve_status);
printf("Status of gas pressurised Spring System:%s\n",State_Machine[ current_state].Gas_ Pressurized_Spring_system_ status);
}
else if(pl==(Raising))
{
CheckBeforeLanding();
}
}
//LoweringGear.
void LoweringGear(void)
{
current_state=LOWERING_GEAR;
printf("Enter the status of pilot's lever and limit switch:");
fflush(stdout);
scanf("%d %d",&pl,&limit_switch);
if(pl==falling && limit_switch==on)
{
current_state=CHECKING_BEFORE_ TAKEOFF;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
}
else if(pl==Raising && limit_switch==off)
{
current_state=GEAR_DOWN;
printf("Current State:%s\n",State_Machine[ current_state].current_state_ indication);
printf("Light is:%s\n",State_Machine[ current_state].light);
printf("Landing Gear Hydraulic Control:%s\n",State_Machine[ current_state].landing_gear_ hydraulic_control);
}
if(limit_switch==off)
{
LoweringGear();
}
}
//Initiate_State_Machine
void Initiate_State_Machine()
{
current_state==GEAR_DOWN;
printf("The Finite State Machine is Intialized and current the program is in""GearDown State & Light is:%s\n",State_Machine[ current_state].light);
}
OUTPUT:-
The Finite State Machine is Intialized and current the program is inGearDown State & Light is:Green
Enter the status of pilot's lever and squat switch0 0
current state:CheckingBeforeTakeOFF
Light is :Green
Enter the status of pilot's lever and squat switch and hydraulic mechanism:0 0
Current State:RaisingGear
Light is:Red
Status of Direction valve:Up
Enter the status of pilot's lever and limit switch:0 1
Current State:GearUp
Light is:Off
Landing Gear Hydraulic Control:Disbled
Enter the status of pilot's lever:1
Current State:CheckBeforeLanding
Light is:Red
Landing Gear Hydraulic Control:Enabled
Enter the status of pilot's lever and hydraulic mechanism status:1 0
Current State:LoweringGear
Light is:Green
Status of Direction valve:Down
Enter the status of pilot's lever and limit switch:0 1
Current State:GearDown
Light is:Green
Landing Gear Hydraulic Control:Enabled