Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
Project Overview
In this project, we will control the retraction and extension of airplane landing gear using the embedded c language.
#ifndef STATES_H_
#define STATES_H_
void Init_State_Machine();
void Gear_Down();
void Checking_Before_Takeoff();
void Raising_Gear();
void Gear_Up();
void Checking_Before_Landing();
void Lowering_Gear();
typedef enum State
{
GR_DWN,
CHK_BFR_TKFF,
RSING_GR,
GR_UP,
CHK_BFR_LND,
LWRNG_GR
}State_Type;
typedef enum Switch
{
Open,
Close//Plane is in ground
}Switch_Status;
typedef enum Pilot_Lever
{
Rising,
Falling,
UP,
DOWN
}Pilot_Lever_Status;
typedef enum Hydraulic_Mechanism
{
Working,
Malfunctioning
}Hydraulic_Mechanism_Status;
/* -----input for changing the State----- */
static volatile Switch_Status squat_switch;
static volatile Switch_Status limit_switch;
static volatile Pilot_Lever_Status pilot_lever;
static volatile Hydraulic_Mechanism_Status hydraulic_mechanism;
State_Type current_state;
typedef struct
{
char* current_state_indication;
char* light_status;
char* direction_valve_status;
char* hydraulic_pump_control_status;
char* gas_pressurized_spring_status[2];
}State_Table;
static State_Table State_Machine[6] = {
{"Gear Down","Green","Down","Enabled",{0,0}},
{"Checking Before Take Off","Green","Down","Enabled",{0,0}},
{"Raising Gear","Red","Up","Enabled",{"Disabled","Enabled"}},
{"Gear Up","Off","Null","Disabled",{0,0}},
{"Checking Before Landing","Red","Down","Enabled",{0,0}},
{"Lowering Gear","Green","Down","Enabled",{"Disabled","Enabled"}}
};
#endif /* STATES_H_ */
#include
#include "States.h"
static void (*state_table[])(void) = {Gear_Down, Checking_Before_Takeoff, Raising_Gear,
Gear_Up, Checking_Before_Landing, Lowering_Gear};// syntax
int main()
{
Init_State_Machine();
while(1)
{
state_table[current_state]();
}
}
#include
#include "States.h"
void Checking_Before_Landing()
{
current_state = CHK_BFR_LND;
//printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Pilot's Lever Position and Status of Hydraulic Mechanism:");
fflush(stdout);
scanf("%d %d",&pilot_lever,&hydraulic_mechanism);
if(pilot_lever == DOWN && hydraulic_mechanism == Working)
{
current_state = LWRNG_GR;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Direction Valve Status:%sn",State_Machine[current_state].direction_valve_status);
}
else if(pilot_lever == DOWN && hydraulic_mechanism == Malfunctioning)
{
current_state = LWRNG_GR;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Direction Valve Status:%sn",State_Machine[current_state].direction_valve_status);
printf("Gas Pressurized Spring System Status:%sn",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
if(pilot_lever == (UP || Rising || Falling))
{
Checking_Before_Landing();
}
}
#include
#include "States.h"
void Checking_Before_Takeoff()
{
current_state = CHK_BFR_TKFF;
//printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Pilot's Lever Position,Squat Switch Status and Hydraulic Mechanism Status:");
fflush(stdout);
scanf("%d %d %d",&pilot_lever,&squat_switch,&hydraulic_mechanism);
printf("nWait for 2 secsn");
if(pilot_lever == Falling || squat_switch == Close)
{
Gear_Down();
}
else if(pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Working)
{
current_state = RSING_GR;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Direction Valve Status:%snn",State_Machine[current_state].direction_valve_status);
}
else if(pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Malfunctioning)
{
current_state = RSING_GR;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Direction Valve Status:%sn",State_Machine[current_state].direction_valve_status);
printf("Gas Pressurized Spring System Status:%sn",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
}
#include
#include "States.h"
void Gear_Down(void)
{
current_state = GR_DWN;
//printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Pilot's Lever Position and Squat Switch Status:");
fflush(stdout);
scanf("%d %d",&pilot_lever,&squat_switch);
if(pilot_lever == Rising && squat_switch == Open)
{
current_state = CHK_BFR_TKFF;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
}
else
{
Gear_Down();
}
}
#include
#include "States.h"
void Gear_Up()
{
current_state = GR_UP;
//printf("Current State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Pilot's Lever Position:");
fflush(stdout);
scanf("%d",&pilot_lever);
if(pilot_lever == Falling)
{
current_state = CHK_BFR_LND;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%sn",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Gear_Up();
}
}
#include
#include "states.h"
void Init_State_Machine()
{
//System Initialized and its in State_A
current_state = GR_DWN;
printf("nState Machine is initialized & Program is in Gear_Down State & Light Status : %sn"
,State_Machine[current_state].light_status);
}
#include
#include "States.h"
void Lowering_Gear()
{
current_state = LWRNG_GR;
//printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Limit Switch Status,Pilots Leaver Status::");
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever);
if( limit_switch == Close && pilot_lever == Rising )
{
current_state = CHK_BFR_TKFF;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
}
if(limit_switch == Open && pilot_lever == DOWN)
{
current_state = GR_DWN;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%sn",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Lowering_Gear();
}
}
#include
#include "States.h"
void Raising_Gear()
{
current_state = RSING_GR;
//printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("nEnter the Limit Switch Status,Pilots Leaver Status:");
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever);
printf("nWait for 1 secn");
if(pilot_lever == Falling && limit_switch == Open)
{
current_state = CHK_BFR_LND;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%sn",State_Machine[current_state].hydraulic_pump_control_status);
}
else if(limit_switch == Close && pilot_lever == UP)
{
current_state = GR_UP;
printf("nCurrent State : %sn",State_Machine[current_state].current_state_indication);
printf("Light Status:%sn",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%sn",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Raising_Gear();
}
}