Overview of 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.
Goals
Controlling the direction of valve.
Controlling the retraction and extension of airplane’s landing gear.
controlling squat switch
controlling pilot lever
controlling limit switch
controlling hydraulic mechanism.
Key Highlights of the Project:
A direction valve is controlled by the software to allow the hydraulic pressure to either raise or lower the landing gear.
By using squat switch,limit switch amd pilot lever.
#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"},
{"Checking before takeoff", "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();
}
}