Challenge

Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear

Main.c

#include<stdio.h>
#include<Header.h>

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

int main()

{
Initiate_State Machine();
while(1)
{
stateTable[current_state]();

}
}
//Geardown

void GearDown(void)

{
current_state=GEAR_DoMW;
printf("Enter the status of pilot's lever and squat switch:");
fflush(stdout);
scanf("%d %d", &pilot_lever, &squat_switch);
if (pilot_lever=sraising && Squat_switch==0n)
{
current_state=CHECK_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", &pilot_lever, &squat_switch, &hydraulic_mechanism);
if (pilot_lever==falling && squat_switch=-OFF)
{
GearDown();
}
else if(pilot_lever=sraising && squat_switch== On && hydraulic_mechanism== 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(pilot_lever == raising && squat_suitch == On && hydraulic_mechanism == 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("Kd %d", &pilot_lever, &limit_switch);

if (pilot_lever==falling && limit_switch==0n)
{
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(pilot_lever==raising && limit_switch=-0fF)
{
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", Spilot_lever);

//GearuP
void GearUP(void)

{
current_state=GEAR_UP;
printf ("Enter the status of pilot's lever:");
fflush(stdout);
scanf("%d", &pilot_lever);
if (pilot_lever==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", &pilot_lever, &hydraulic_mechanism);
if(pilot_lever==falling & hydraulic_mechanism==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(pilot_lever == falling && squat_switch == On && hydraulic_mechanism == 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 Pressurized Spring Systen: %s\n",State_Machine[current_state].Gas_Pressurized_Spring_system_status);

}
if (pilot_lever == (raising || falling))
{

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",&pilot_lever,&limit_swith);
if(pilot_lever == rising && limit_switch == on)
{
current_state=CHECK_BEFORE_TAKEOFF;
printf("Current state:%s\n", State_Machine[current_state].current_state_indication) ;
printf("Light is :%s\n", State_Machine[current_state].light);
}

if (pilot_lever == rising && 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();
}
}

void Initiate_State_Machine()
{
current_state=GEAR_DOWN;
printf("The Finite State Machine is Initielized and current the program is in GearDown State & Light is: %s\n", State_Machine[current_state].light);
}

Header.h

#ifndef FSM_H_
#define FSM_H_
#include<stdio.h>
void Initiate_State_Machine();
void GearDown();
void CheckingBefore_TakeOFF();
void RaisingGear();
void GearUP();
void CheckBeforeLanding();
void 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 Grnd
}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 pilot_lever;
static volatile Hydraulic_Mechanism_hydraulic_mechanism;

State_Type current_state;

typedef struct
{
char* current_state_indication;
char* light;
char* direction_valve_status;
char* Gas_Pressurized_Spring_system_status[2];
char* landing_gear_hydraulic_control;

}State_Table;

static State_Table;
State Machine[6]=
{

{"GearDown", "Green", "Down", "Enabled", {NULL,NULL}},
{"CheckingBefore TakeOFF", "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

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.