Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
// Online C compiler to run C program online
#include <stdio.h>
// Step 1: Enum for States
typedef enum {
GEAR_DOWN,
MOVING_UP,
GEAR_UP,
MOVING_DOWN
} GearState;
// Step 2: Enum for Inputs
typedef enum {
SWITCH_UP,
SWITCH_DOWN,
SENSOR_RETRACTED,
SENSOR_EXTENDED,
NO_INPUT
} InputSignal;
// Step 3: FSM Logic
void updateFSM(GearState *currentState, InputSignal input) {
switch (*currentState) {
case GEAR_DOWN:
if (input == SWITCH_UP) {
printf("Transition: GEAR_DOWN → MOVING_UP\n");
*currentState = MOVING_UP;
}
break;
case MOVING_UP:
if (input == SENSOR_RETRACTED) {
printf("Transition: MOVING_UP → GEAR_UP\n");
*currentState = GEAR_UP;
}
break;
case GEAR_UP:
if (input == SWITCH_DOWN) {
printf("Transition: GEAR_UP → MOVING_DOWN\n");
*currentState = MOVING_DOWN;
}
break;
case MOVING_DOWN:
if (input == SENSOR_EXTENDED) {
printf("Transition: MOVING_DOWN → GEAR_DOWN\n");
*currentState = GEAR_DOWN;
}
break;
default:
break;
}
}
// Step 4: Print State
void printState(GearState state) {
switch (state) {
case GEAR_DOWN: printf("Current State: GEAR_DOWN\n"); break;
case MOVING_UP: printf("Current State: MOVING_UP\n"); break;
case GEAR_UP: printf("Current State: GEAR_UP\n"); break;
case MOVING_DOWN: printf("Current State: MOVING_DOWN\n"); break;
}
}
int main() {
GearState state = GEAR_DOWN;
int input;
while (1) {
printState(state);
printf("\nEnter input:\n");
printf("0 - SWITCH_UP\n");
printf("1 - SWITCH_DOWN\n");
printf("2 - SENSOR_RETRACTED\n");
printf("3 - SENSOR_EXTENDED\n");
printf("4 - Exit\n");
printf("Choice: ");
scanf("%d", &input);
if (input == 4) {
printf("Exiting simulation.\n");
break;
}
if (input < 0 || input > 3) {
printf("Invalid input. Try again.\n");
continue;
}
updateFSM(&state, (InputSignal)input);
}
return 0;
}