Challenge

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

Problem statement.....

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

Solution....

code....

/*
* submission.c
*
* Created on: 09-Jan-2023
* Author: My Lapy
*/

#include <stdio.h>
#include <stdlib.h>

void Gear_Down(void);
void Checking_Before_Take_Off(void);
void Raising_Gear(void);
void Gear_Up(void);
void Checking_Before_Landing(void);
void Lowering_Gear(void);

typedef enum
{
GEAR_DOWN,
CHECKING_BEFORE_TAKE_OFF,
RAISING_GEAR,
GEAR_UP,
CHECKING_BEFORE_LANDING,
LOWERING_GEAR
}State_type;

typedef enum
{
OFF,
ON
}Switch;

typedef enum
{
RAISING,
FALLING,
UP,
DOWN
}Pilot_lever;

typedef enum
{
WORKING,
NOT_WORKING
}Hydraulic_mechanism;

static volatile Switch Squat_Switch;
static volatile Switch Limit_Switch;
static volatile Pilot_lever PL;
static volatile Hydraulic_mechanism HM;
State_type Current_state;

typedef struct
{
char* Currentstate;
char* Light;
char* Direction_valve;
char* Hydraulic_control;
}State;

static void(*State_Table[])(void)={Gear_Down,Checking_Before_Take_Off,Raising_Gear,Gear_Up,Checking_Before_Landing,Lowering_Gear};

static State State_Machine[6]={
{"Gear Down","Green","Down","Enabled"},{"Checking Before Take Off","Green","Down","Enabled"},
{"Raising Gear","Red","Up","Enabled"},{"Gear Up","off","Null","Disabled"},
{"Checking Before Landing","Red","Down","Enabled"},{"Lowering Gear","Green","Down","Enabled"}
};

int main()
{
Current_state = GEAR_DOWN;
while(1)
{
State_Table[Current_state]();
}
return 0;
}

Gear_Down()
{
Current_state = GEAR_DOWN;
printf("\nEnter the Pilot lever and Squat_Switch Values:");
fflush(stdout);
scanf("%d %d",&PL,&Squat_Switch);
if((PL==RAISING)&&(Squat_Switch==ON))
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Gear_Down();
}
}

Checking_Before_Take_Off()
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nEnter the Pilot lever, Squat_Switch and Hydraulic_mechanism Values:");
fflush(stdout);
scanf("%d %d %d",&PL,&Squat_Switch,&HM);
if((PL==FALLING)&&(Squat_Switch==OFF))
{
Current_state = GEAR_DOWN;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if((PL==UP)&&(HM==WORKING))
{
Current_state = RAISING_GEAR;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Checking_Before_Take_Off();
}
}

Raising_Gear()
{
Current_state = RAISING_GEAR;
printf("\nEnter the Pilot lever,Limit_Switch Values:");
fflush(stdout);
scanf("%d %d",&PL,&Limit_Switch);
if(PL==FALLING)
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if(Limit_Switch==OFF)
{
Current_state = GEAR_UP;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Raising_Gear();
}
}

Gear_Up()
{
Current_state = GEAR_UP;
printf("\nEnter the Pilot lever Values:");
fflush(stdout);
scanf("%d",&PL);
if(PL==FALLING)
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Gear_Up();
}
}

Checking_Before_Landing()
{
Current_state = CHECKING_BEFORE_LANDING;
printf("\nEnter the Pilot lever and Hydraulic_mechanism Values:");
fflush(stdout);
scanf("%d%d",&PL,&HM);
if((PL==DOWN)||(HM==NOT_WORKING))
{
Current_state = LOWERING_GEAR;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Checking_Before_Landing();
}
}

Lowering_Gear()
{
Current_state = LOWERING_GEAR;
printf("\nEnter the Pilot lever and Limit Switch Values:");
fflush(stdout);
scanf("%d%d",&PL,&Limit_Switch);
if((Limit_Switch==ON))
{
Current_state = GEAR_DOWN;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else if(PL==RAISING)
{
Current_state = CHECKING_BEFORE_TAKE_OFF;
printf("\nCurrent state: %s",State_Machine[Current_state].Currentstate);
printf("\nLight Status: %s",State_Machine[Current_state].Light);
printf("\nDirection_valve Status: %s",State_Machine[Current_state].Direction_valve);
printf("\nHydraulic_control Status: %s",State_Machine[Current_state].Hydraulic_control);
}
else
{
Lowering_Gear();
}
}

Output....


Enter the Pilot lever and Squat_Switch Values:0 1

Current state: Checking Before Take Off
Light Status: Green
Direction_valve Status: Down
Hydraulic_control Status: Enabled
Enter the Pilot lever, Squat_Switch and Hydraulic_mechanism Values:1 0 0

Current state: Gear Down
Light Status: Green
Direction_valve Status: Down
Hydraulic_control Status: Enabled
Enter the Pilot lever and Squat_Switch Values:0 1

Current state: Checking Before Take Off
Light Status: Green
Direction_valve Status: Down
Hydraulic_control Status: Enabled
Enter the Pilot lever, Squat_Switch and Hydraulic_mechanism Values:2 1 0

Current state: Raising Gear
Light Status: Red
Direction_valve Status: Up
Hydraulic_control Status: Enabled
Enter the Pilot lever,Limit_Switch Values:1 1

Current state: Checking Before Landing
Light Status: Red
Direction_valve Status: Down
Hydraulic_control Status: Enabled
Enter the Pilot lever and Hydraulic_mechanism Values:3 1

Current state: Lowering Gear
Light Status: Green
Direction_valve Status: Down
Hydraulic_control Status: Enabled
Enter the Pilot lever and Limit Switch Values

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.