Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
Implement the Code for controlling the retraction and extension of Airplane’s landing gear
Overview of the project:
In this project, the Finite State Machine is used to manage the retraction and extension of an airplanes gear (FSM). the most efficient algorithm is the FSM, which is a mathematical processing model.
Actually an airplane has 3 gear for landing : nose gear, left gear and right gear.
There is an electrically powered by hydraulic pump that applies pressure that gears to brinmg it down and pull it up. there is a limit switch on each leg of the gear. one extra squat switch is installed in the nose gear to assess whether the plane is on ground or not.
Goals:
Direction valve can be controlled by software to allow the hydraulic pressure to either raise or lower the landing gear.
controlling the retraction and extension of the landing gear on an aeroplane.
Code:
/*........................*/
* Project_2.c
*
* Created on: Apr 27, 2022
* Author: PC
*/.............................*/
#include<stdio.h>
#include"states.h"
static void (*state_table[])(void) = {Gear_Down,Checking_Before_Takeoff, Raising_Gear, Gear_Up, Checking_Before_Landing, Lowering_Gear};
int main()
{
Init_State_Machine();
while(1)
{
state_table[current_state]();
}
}
/*.........................*/
* states.h
*
* Created on: Apr 27, 2022
* Author: PC
*/............................*/
#ifndef STATES_H_
#define STATES_H_
/*....functions.....*/
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 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]={
{"GearDown","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_ */
/*...................................*/
* Lowering_Gear.c
*
* Created on: Apr 27, 2022
* Author: PC
*/.................................*/
#include"States.h"
#include<stdio.h>
void Lowering_Gear()
{
current_state = LWRNG_GR;
//printf("\ncurrent State:%s\n,State_Machine[current_state].current_state_indication);
printf("\n Enter the limit Switch Status,pilot's lever Position");
fflush(stdout);
scanf("%d%d",&pilot_lever, &limit_switch);
if(limit_switch == Close && pilot_lever == Rising )
{
current_state=CHK_BFR_TKFF;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight Status: %s",State_Machine[current_state].light_status);
}
if(limit_switch == Open && pilot_lever ==DOWN)
{
current_state = GR_DWN;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight Status: %s",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Lowering_Gear();
}
}
/*...........................*/
* checking_Before_Takeoff.c
*
* Created on: Apr 28, 2022
* Author: PC
*/...................................*/
#include"States.h"
#include<stdio.h>
void Checking_Before_Takeoff()
{
current_state = CHK_BFR_TKFF;
//printf("\nCurrent State:%s\n,State_Machine[current_state],current_state_indication);
printf("\n Enter 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("\n Wait for 2 secs\n");
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("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight Status: %s",State_Machine[current_state].light_status);
printf("Direction valve Status:%s\n\n",State_Machine[current_state].direction_valve_status);
}
else if (pilot_lever== UP && Squat_Switch == Open && hydraulic_mechanism ==Malfunctioning)
{printf("Light Status:%s\n", State_Machine[current_state].light_status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_valve_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
}
/*........................*/
* checking_before_landing.c
*
* Created on: Apr 28, 2022
* Author: PC
*/............................*/
#include"States.h"
#include<stdio.h>
void Checking_Before_Landing()
{
current_state = CHK_BFR_LND;
//printf("\nCurrent State:%s\n,State_Machine[current_state].current_state_indication);
printf("\n Enter the Pilot's Lever Position and Hydraulic Mechanism Status:");
fflush(stdout);
scanf("%d %d",&pilot_lever, &hydraulic_mechanism);
if(pilot_lever == DOWN && hydraulic_mechanism == Working)
{
current_state = LWRNG_GR;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight State: %s",State_Machine[current_state].light_status);
printf("Direction Valve Status:%s\n\n",State_Machine[current_state].direction_valve_status);
}
else if(pilot_lever== DOWN && hydraulic_mechanism == Malfunctioning)
{
current_state = LWRNG_GR;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight Status: %s",State_Machine[current_state].light_status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_valve_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
if(pilot_lever == (UP||Rising||Falling))
{
Checking_Before_Landing();
}
}
/*.......................*/
* raising_gear.c
*
* Created on: Apr 28, 2022
* Author: PC
*/.............................*/
#include"States.h"
#include<stdio.h>
void Raising_Gear()
{
current_state = RSING_GR;
//printf("\nCurrent State:%s\n,State_Machine[current_state].current_state_indication);
printf("\n Enter the Limit Switch Status,Pilots Lever Status:");
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever);
printf("\nWait for 1 sec\n");
if(pilot_lever == Falling && limit_switch == Open)
{
current_state=CHK_BFR_LND;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight State: %s",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear State:%s\n\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else if(limit_switch == Close && pilot_lever == UP)
{
current_state=GR_UP;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\n Light State: %s",State_Machine[current_state].light_status);
printf("\n Hydraulic Control for landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Raising_Gear();
}
}
/*.........................*/
* gear_down.c
*
* Created on: Apr 28, 2022
* Author: PC
*/............................*/
#include"States.h"
#include<stdio.h>
void Gear_Down(void)
{
current_state = GR_DWN;
//printf("\nCurrent State:%s\n,State_Machine[current_state],current_state_indication);
printf("\n Enter the pilot's Lever Position, 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("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight State: %s",State_Machine[current_state].light_status);
}
else
{
Gear_Down();
}
}
/*......................*/
* init_state_machine.c
*
* Created on: Apr 28, 2022
* Author: PC
*/.............................*/
#include"States.h"
void Init_State_Machine()
{
//system initialised and its in state_A
current_state = GR_DWN;
printf("\n State Machine is initialized & Program is in Gear_Down_state & Light_Status:%s\n",State_Machine[current_state].light_status);
}
/*...............................*/
* Gear_up.c
*
* Created on: Apr 28, 2022
* Author: PC
*/...............................*/
#include"States.h"
#include<stdio.h>
void Gear_Up()
{
current_state = GR_UP;
//printf("\nCurrent State:%s\n,State_Machine[current_state].current state_indication);
printf("\n Enter the Pilot's lever Position ");
fflush(stdout);
scanf("%d",&pilot_lever);
if(pilot_lever == Falling)
{
current_state=CHK_BFR_LND;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("\nLight Status: %s",State_Machine[current_state].light_status);
printf("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Gear_Up();
}
}
Output:
State Machine is initialized & Program is in Gear_Down_state & Light_Status:Green
Enter the pilot's Lever Position, Squat Switch Status 0 0
Current State:Checking Before Take Off
Light State: Green
Enter the pilot's lever Position, Squat Switch Status and Hydraulic Mechanism Status:2 0 0
Wait for 2 secs
Current State:Raising Gear
Light Status: RedDirection valve Status:Up
Enter the Limit Switch Status,Pilots Lever Status:1 2
Wait for 1 sec
Current State:Gear Up
Light State: Off
Hydraulic Control for landing Gear Status:Disabled
Enter the Pilot's lever Position 1
Current State:Checking Before Landing
Light Status: RedHydraulic Control for Landing Gear Status:Enabled
Enter the Pilot's Lever Position and Hydraulic Mechanism Status:3 1
Current State:Lowering Gear
Light Status: GreenDirection Valve Status:Down
Gas Pressurized Spring System Status:Enabled
Enter the limit Switch Status,pilot's lever Position1 0
Enter the limit Switch Status,pilot's lever Position3 1
Enter the limit Switch Status,pilot's lever Position2 0 0