Challenge

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

// Shrividya Madam

#include <stdio.h>

#include <stdlib.h>

/* Functions used in our projects */

void Initial_state_machine(); // function declaration

void Gear_down();

void Checking_before_takeoff();

void Raising_gear();

void Gear_up();

void Checking_before_landing();

void Lowering_gear();

typedef enum states

{

GEAR_DOWN,

CHECK_BEFORE_TAKEOFF,

RAISING_GEAR,

GEAR_UP,

CHECK_BEFORE_LANDING,

LOWERING_GEAR

} state_type;

typedef enum Switch

{

open = 0,

close = 1

} Switch_status;

typedef enum pilot_lever

{

raising = 0,

falling = 1,

up = 2,

down = 3

} pilot_lever_status;

typedef enum hydraulic_mechanism

{

working = 0,

malfunctioning = 1

} hydraulic_mechanism_status;

/* input used in order to change 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 // structure is used to have different types of data type

{

char *current_state_status; // output which we want to visualize are given under structure as structure member.

char *light_status;

char *direction_value_status;

char *hydraulic_pump_ctrl_status;

char *gas_pressurized_spring_status[2];

} state_table;

/* State table of the required system */

static state_table state_machine[6] = {

{"gear down", "green", "down", "enables", {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"}},

};

static void (*State_Table[])(void) = {Gear_down, Checking_before_takeoff, Raising_gear, Gear_up, Checking_before_landing, Lowering_gear};

// initial state machine

void Initial_state_machine()

{

current_state = GEAR_DOWN;

// during initialization, the system is at gear down.

printf("\n state machine is initialized and at first program is in gear down and its light status is:%s\n", state_machine[current_state].light_status);

}

// Gear down

void Gear_down(void)

{

current_state = GEAR_DOWN;

printf("\n Current state:Gear down\n");

// getting pilot lever and squat switch value from input

printf("\n Enter the pilot's lever position and squat switch status:\n");

fflush(stdout);

scanf("%d %d", (int *)&pilot_lever, (int *)&squat_switch);

// if pilot lever raising(0) and squat switch is open(0)

if (pilot_lever == raising && squat_switch == open)

{

current_state = CHECK_BEFORE_TAKEOFF;

// current status value is printed from the state table

printf("\n The current state of the machine is:%s\n", state_machine[current_state].current_state_status);

// light status value is taken from state table current state

printf("\n Light status of the current machine state is:%s\n", state_machine[current_state].light_status);

}

else

{

Gear_down();

// gear down function is called

}

}

// Checking before takeoff

void Checking_before_takeoff()

{

current_state = CHECK_BEFORE_TAKEOFF; // current state is check before takeoff

printf("\n Enter the pilot lever position, squat switch and hydraulic mechanism:\n");

// getting pilot lever, squat switch and hydraulic mechanism as input

fflush(stdout);

scanf("%d %d %d", (int *)&pilot_lever, (int *)&squat_switch, (int *)&hydraulic_mechanism);

printf("\n just wait 2secs\n");

if (pilot_lever == up && squat_switch == close)

// pilot lever is up and squat switch is closed it get into the if loop

{

Gear_down();

// gear down function is called

}

else if (pilot_lever == up && squat_switch == open && hydraulic_mechanism == working) //

{

current_state = RAISING_GEAR;

printf("\n Current state:%s\n", state_machine[current_state].current_state_status);

printf("light status: %s\n", state_machine[current_state].light_status);

printf("\n direction status:%s\n\n", state_machine[current_state].direction_value_status);

}

else if (pilot_lever == up && squat_switch == open && hydraulic_mechanism == malfunctioning)

{

current_state = RAISING_GEAR;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("light status: %s\n", state_machine[current_state].light_status);

printf("\n direction status:%s\n\n", state_machine[current_state].direction_value_status);

printf("\n Gas pressurized spring status:%s\n", state_machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);

}

}

// Raising gear

void Raising_gear()

{

current_state = RAISING_GEAR;

printf("\n if Raising_grar: Enter the switch status and pilot lever status:\n");

fflush(stdout);

scanf("%d %d", (int *)&limit_switch, (int *)&pilot_lever);

printf("\n wait for 1 sec\n");

if (pilot_lever == falling && limit_switch == open)

{

current_state = CHECK_BEFORE_LANDING;

printf("\n current state is:%s\n", state_machine[current_state].current_state_status);

printf("\n Light status:%s\n", state_machine[current_state].light_status);

printf("\n Hydraulic condition for landing gear status is %s\n", state_machine[current_state].hydraulic_pump_ctrl_status);

}

else if (limit_switch == close && pilot_lever == up)

{

current_state = GEAR_UP;

printf("\n current state is:%s\n", state_machine[current_state].current_state_status);

printf("\n Light status:%s\n", state_machine[current_state].light_status);

printf("\n Hydraulic condition for landing gear status is %s\n", state_machine[current_state].hydraulic_pump_ctrl_status);

}

else

{

Raising_gear();

}

}

// Gear up

void Gear_up()

{

current_state = GEAR_UP;

printf("\n If gear_up Enter the pilot lever position :\n");

fflush(stdout);

scanf("%d", (int *)&pilot_lever);

if (pilot_lever == falling)

{

current_state = CHECK_BEFORE_LANDING;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("\n light status: %s\n", state_machine[current_state].light_status);

printf("\n Hydraulic condition for landing gear status is %s\n", state_machine[current_state].hydraulic_pump_ctrl_status);

}

else

{

Gear_up();

}

}

// Checking before landing

void Checking_before_landing()

{

current_state = CHECK_BEFORE_LANDING;

printf("\n Enter the pilot lever position, status of hydraulic mechanism:\n");

fflush(stdout);

scanf("%d %d ", (int *)&pilot_lever, (int *)&hydraulic_mechanism);

if (pilot_lever == down && hydraulic_mechanism == working)

{

current_state = LOWERING_GEAR;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("light status: %s\n", state_machine[current_state].light_status);

printf("\n direction status:%s\n\n", state_machine[current_state].direction_value_status);

}

else if (pilot_lever == down && hydraulic_mechanism == malfunctioning)

{

current_state = LOWERING_GEAR;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("light status: %s\n", state_machine[current_state].light_status);

printf("\n direction status:%s\n\n", state_machine[current_state].direction_value_status);

printf("\n Gas pressurized spring status:%s\n", state_machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);

}

if (pilot_lever == (up || raising || falling))

{

Checking_before_landing();

}

}

// Lowering gear

void Lowering_gear()

{

current_state = LOWERING_GEAR;

printf("\n Enter the pilot lever position, limit switch :");

fflush(stdout);

scanf("%d %d", (int *)&pilot_lever, (int *)&limit_switch);

if (pilot_lever == raising && limit_switch == close)

{

current_state = CHECK_BEFORE_TAKEOFF;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("\n light status: %s\n", state_machine[current_state].light_status);

}

if (pilot_lever == down && limit_switch == open)

{

current_state = GEAR_DOWN;

printf("\n Current state: %s\n", state_machine[current_state].current_state_status);

printf("\n light status: %s\n", state_machine[current_state].light_status);

printf("\n Hydraulic condition for landing gear status is%s\n", state_machine[current_state].hydraulic_pump_ctrl_status);

}

else

{

Lowering_gear();

}

}

// main function

int main()

{

Initial_state_machine();

while (1)

{

State_Table[current_state]();

}

return 0;

}

output:-

state machine is initialized and at first program is in gear down and its light status is:green

Current state:Gear down

Enter the pilot's lever position and squat switch status:

0

0

The current state of the machine is:checking before take off

Light status of the current machine state is:green

Enter the pilot lever position, squat switch and hydraulic mechanism:

2 0

0

just wait 2secs

Current state:raising gear

light status: red

direction status:up

if Raising_grar: Enter the switch status and pilot lever status:

0

1

wait for 1 sec

current state is:checking before landing

Light status:red

Hydraulic condition for landing gear status is enabled

Enter the pilot lever position, status of hydraulic mechanism:

3

0

0

Current state: lowering gear

light status: green

direction status:down

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.