Challenge

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.

Ans.

#include<stdio.h> // include header file
#include<state.h> // include user define library

static void(*stateTable[])()={GearDown,CheckingBeforeTakeOFF,RaisingGear,GearUp, // initialize function
CheckBeforeLanding,LoweringGear};

int main() // declare main function
{
Initiate_State_Machine(); // call initialize state machine function
while(1) // infinite while loop for continue running code
{
stateTable[current_state](); // call function based on current state
}
}

void GearDown() // define gear down function
{
current_state=GEAR_DOWN; // make current state as gear down
printf("Enter the status of pilot's lever and squat switch:"); // print instruction
fflush(stdout);
scanf("%d %d", &pilot_lever, &squat_switch); // scan input value
if (pilot_lever==Raising && squat_switch==On) // check condition based on input value
{
current_state=CHECKING_BEFORE_TAKEOFF; // change current state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine[current_state].light); // print light status
}
else
{
GearDown(); // if condition not satisfied call gear down function
}
}

void CheckingBeforeTakeOFF() // define CheckingBeforeTakeOFF function
{
current_state=CHECKING_BEFORE_TAKEOFF; // change current state
printf("Enter the status of pilot's lever and squat switch and hydraulic mechanism: "); // print instruction to input data
fflush(stdout);
scanf("%d %d %d", &pilot_lever, &squat_switch, &hydraulic_mechanism); // scan input value
if(pilot_lever==falling && squat_switch==Off) // check condition for gear down
{
GearDown(); // call gear down function
}
else if(pilot_lever==Raising && squat_switch==On && hydraulic_mechanism== working) // check condition for rising gear and hydraulic status
{
current_state=RAISING_GEAR; // change state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine [current_state].light); // print light status
printf("Status of Direction valve :%s\n",State_Machine [current_state].direction_valve_status);// print direction valve status
}
else if(pilot_lever==Raising && squat_switch==On && hydraulic_mechanism== not_working) // check condition for rising gear and hydraulic status
{
current_state=RAISING_GEAR; // change state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine[current_state].light); // print light status
printf("Status of Direction valve :%s\n", // print direction valve status
State_Machine[current_state].direction_valve_status);
printf("Status of Gas Pressurised Spring System: %s\n", // print gas presuurized spring status
State_Machine[current_state].Gas_Pressurized_Spring_system_status[hydraulic_mechanism]);

}
}
//RaisingGear
void RaisingGear() // define rising gear function
{
current_state=RAISING_GEAR; // change state to rising gear
printf("Enter the status of pilot's lever and limit switch: "); // print instruction to input data
fflush(stdout);
scanf("%d %d", &pilot_lever, &limit_switch); // scan input data
if (pilot_lever==falling && limit_switch==On) // check condition for check before landing
{
current_state=CHECK_BEFORE_LANDING; // change state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine[current_state].light); // print light status
printf("Landing Gear Hydraulic Control:%s\n", // print landing gear hydraulic control status
State_Machine[current_state].landing_gear_hydraulic_control);
}
else if(pilot_lever==Raising && limit_switch==Off) // check pilot lever and limit switch
{
current_state=GEAR_UP; // change state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine [current_state].light); // print current light status
printf("Landing Gear Hydraulic Control:%s\n", // print landing gear hydraulic control status
State_Machine[current_state].landing_gear_hydraulic_control);
}
else
{
RaisingGear(); // else call rising gear function again
}
}
//GearUP
void GearUp () // define gear up function
{
current_state=GEAR_UP; // change current state
printf("Enter the status of pilot's lever: "); // print instruction to input data
fflush(stdout);
scanf("%d", &pilot_lever); // scan data
if (pilot_lever==falling) // check condition
{
current_state=CHECK_BEFORE_LANDING; // change current state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current status
printf("Light is :%s\n", State_Machine [current_state].light); // print light status
printf("Landing Gear Hydraulic Control:%s\n", // print landig gear hydraulic control status
State_Machine [current_state].landing_gear_hydraulic_control);
}
else
{
GearUp(); // else call gearup function
}
}
//CheckBeforeLanding
void CheckBeforeLanding() // define checkbeforelanding function
{
current_state=CHECK_BEFORE_LANDING; // change current state
printf("Enter the status of pilot's lever and hydraulic mechanism status: "); // print instruction for input data
fflush(stdout);
scanf("%d %d", &pilot_lever, &hydraulic_mechanism); // scan input data
if (pilot_lever==falling && hydraulic_mechanism==working) // check condition for pilot lever and hydraulic mechanism
{
current_state=LOWERING_GEAR; // change current state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine [current_state]. light); // print light status
printf("Status of Direction valve :%s\n",State_Machine[current_state].direction_valve_status); // print direction valve status
}
else if(pilot_lever==falling && squat_switch==On && hydraulic_mechanism== not_working) // check condition for pilot lever squat switch and hydraulic mech.
{
current_state=LOWERING_GEAR;
printf("Current state: %s\n", State_Machine[current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine [current_state].light); // print current light
printf("Status of Direction valve :%s\n",State_Machine[current_state].direction_valve_status); // print direction valve status
printf("Status of Gas Pressurised Spring System: %s\n", // print gas pressurized spring system status
State_Machine[current_state].Gas_Pressurized_Spring_system_status[hydraulic_mechanism]);
}
else if(pilot_lever== (Raising || falling)) // check condition of pilot lever
{
CheckBeforeLanding(); // call function
}
}
//LoweringGear
void LoweringGear() // define lowering gear function
{
current_state=LOWERING_GEAR; // change state
printf("Enter the status of pilot's lever and limit switch: "); // print instruction to input data
fflush(stdout);
scanf("%d %d", &pilot_lever, &limit_switch); // scan input data
if (pilot_lever==Raising && limit_switch==On) // check condition for pilot lever and limit switch
{
current_state=CHECKING_BEFORE_TAKEOFF; // change current state
printf("Current state: %s\n", State_Machine [current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine[current_state].light); // print light status
}
else if(pilot_lever==falling && limit_switch==Off) // check condition for pilot lever and limit switch
{
current_state=GEAR_DOWN; // change current state
printf("Current state: %s\n", State_Machine[current_state].current_state_indication); // print current state
printf("Light is :%s\n", State_Machine [current_state].light); // print light status
printf("Landing Gear Hydraulic Control: %s\n", // print landing gear hydraulic control status
State_Machine[current_state].landing_gear_hydraulic_control);
}
else if(limit_switch==Off) // check condition for limit switch
{
LoweringGear(); // call lowering gear function
}
}

void Initiate_State_Machine() // define intialize state machine function
{
current_state=GEAR_DOWN; // change current state
printf("The Finite State Machine is Initialized and current the program is in " // print light status
"Gear Down & Light is : %s\n",State_Machine [current_state].light);
}

Library File For This Program

#ifndef FSM_H_
#define FSM_H_

#include<stdio.h> // include header file

void Initiate_State_Machine(); // initialize initial state machine function
void GearDown(); // initialize geardown function
void CheckingBeforeTakeOFF(); // initialize checkingbeforetackoff function
void RaisingGear(); // initialize risinggear function
void GearUp(); // initialize gearup function
void CheckBeforeLanding(); // initialize checkbeforelanding function
void LoweringGear(); // initialize loweringgear function

typedef enum State // initialize enum function for state type
{
GEAR_DOWN, // state type gear down
CHECKING_BEFORE_TAKEOFF, // state type checking before takeoff
RAISING_GEAR, // state type rising gear
GEAR_UP, // state type gear up
CHECK_BEFORE_LANDING, // state type check before landing
LOWERING_GEAR, // state type lowering gear
}State_Type; // change enum function name

typedef enum Switch // initialize enum function for switch status
{
On, // switch status on means plane on air
Off // switch status off mean plan is on ground
}Switch_Status; // change enum function name

typedef enum pilot_lever // initialize enum function for pilot lever status
{
Raising, // rising status
falling // falling status
}Pilot_Lever_Status; // change enum function name using typedef

typedef enum hydraulic_mechanism // initialize enum function for hydraulic mechanism
{
working, // status working mean hydraulic mechanism is ok
not_working // status not working mean hydraulic mechanism is malfunction
}Hydraulic_Mechanism_Status; // change enum function name using typedef

static volatile Switch_Status squat_switch; // assign variable for squat switch
static volatile Switch_Status limit_switch; // assign variable for limit switch
static volatile Pilot_Lever_Status pilot_lever; // assign variable for pilot lever
static volatile Hydraulic_Mechanism_Status hydraulic_mechanism; // assign variable for hydraulic mechanism

State_Type current_state; // define current state

typedef struct // initialize structure for state table data
{
char* current_state_indication; // initialize current state indication
char* light; // initialize light
char* direction_valve_status; // initialize direction valve status
char* landing_gear_hydraulic_control; // initialize landing gear hydraulic control
char* Gas_Pressurized_Spring_system_status[2]; // initialize gas pressurized spring system
}State_Table; // change structure name using typedef

static State_Table State_Machine[6]= { // make state table
{"GearDown","Green","Down","Enabled",{NULL,NULL}},
{"CheckingBeforeTakeOFF","Green","Down","Enabled",{NULL,NULL}},
{"RaisingGear","Red","Up","Enabled",{"Disabled","Enabled"}},
{"GearUp","Off","Null","Disabled",{NULL,NULL}},
{"CheckBeforeLanding","Red","Down","Enabled",{NULL, NULL}},
{"LoweringGear","Green","Down","Enabled",{"Disabled","Enabled"}}
};

#endif /* FSM_H_ */

Output:-

Your portfolio, next

Ship work like this
in your own course.

Talk to a career counsellor

Free 20-minute call. We'll map the right course to where you want to work.

By submitting you agree to our Terms and Privacy Policy.