Challenge

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

#include

#include

// Define states of the landing gear FSM

typedef enum {

GEAR_UP,

GEAR_DOWN,

GEAR_MOVING_UP,

GEAR_MOVING_DOWN,

NUM_STATES

} GearState;

// Define events that trigger state transitions

typedef enum {

EVENT_EXTEND,

EVENT_RETRACT,

EVENT_GEAR_UP,

EVENT_GEAR_DOWN,

NUM_EVENTS

} Event;

// Function prototypes

void handleEvent(Event event);

void transitionToState(GearState newState);

void runStateMachine(Event event);

// Global variable for current state

GearState currentState = GEAR_UP;

int main() {

// Simulate events triggering state transitions

handleEvent(EVENT_EXTEND); // Initial action: extend landing gear

handleEvent(EVENT_GEAR_UP); // Triggering gear up event

handleEvent(EVENT_GEAR_DOWN); // Triggering gear down event

return 0;

}

// Function to handle events and trigger state transitions

void handleEvent(Event event) {

printf("Handling event %d\n", event);

runStateMachine(event);

}

// Function to transition to a new state

void transitionToState(GearState newState) {

currentState = newState;

printf("Transitioned to state %d\n", currentState);

}

// Function to run the state machine based on the current state and event

void runStateMachine(Event event) {

switch(currentState) {

case GEAR_UP:

switch(event) {

case EVENT_EXTEND:

transitionToState(GEAR_MOVING_DOWN);

// Code to physically extend landing gear

printf("Extending landing gear...\n");

break;

default:

// Handle unexpected events for the current state

printf("Unexpected event %d in state GEAR_UP\n", event);

break;

}

break;

case GEAR_DOWN:

switch(event) {

case EVENT_RETRACT:

transitionToState(GEAR_MOVING_UP);

// Code to physically retract landing gear

printf("Retracting landing gear...\n");

break;

default:

// Handle unexpected events for the current state

printf("Unexpected event %d in state GEAR_DOWN\n", event);

break;

}

break;

case GEAR_MOVING_UP:

switch(event) {

case EVENT_GEAR_UP:

transitionToState(GEAR_UP);

// Code to stop gear movement and indicate gear is up

printf("Landing gear is up\n");

break;

default:

// Handle unexpected events for the current state

printf("Unexpected event %d in state GEAR_MOVING_UP\n", event);

break;

}

break;

case GEAR_MOVING_DOWN:

switch(event) {

case EVENT_GEAR_DOWN:

transitionToState(GEAR_DOWN);

// Code to stop gear movement and indicate gear is down

printf("Landing gear is down\n");

break;

default:

// Handle unexpected events for the current state

printf("Unexpected event %d in state GEAR_MOVING_DOWN\n", event);

break;

}

break;

default:

// Handle unexpected current state

printf("Unexpected state %d\n", currentState);

break;

}

}

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.