Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
#include
// Enumeration for different state types
typedef enum {
Gear_Down,
Checking_before_Take_off,
Raising_Gear,
Lowering_Gear,
Checking_before_Landing,
Gear_Up
} State_Types;
// Enumeration for squat and limit switch states
typedef enum {
LIMIT_SWITCH_CLOSED,
LIMIT_SWITCH_OPENED,
SQUAT_SWITCH_CLOSED,
SQUAT_SWITCH_OPENED
} Switch;
// Enumeration for pilot's lever state
typedef enum {
Lever_Up,
Lever_Down,
Lever_Rising_Edge,
Lever_Falling_Edge
} Pilots_lever_state;
// Enumeration for direction valve state
typedef enum {
Down=0,
wait_rise=1,
Up=2,
Downa=3,
wait_fall=4,
Control_disabled=5,
} Direction_valve;
// Structure to define the state machine
typedef struct {
State_Types output;
int time;
State_Types state_types_signal[6];
char* state_signal[6];
} State;
// Initializing the state machine
State state_machine[6] = {
{Gear_Down, 4, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}},
{Checking_before_Take_off, 4, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}},
{Raising_Gear, 4, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}},
{Lowering_Gear, 4, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}},
{Checking_before_Landing, 30, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}},
{Gear_Up, 4, {Gear_Down, Checking_before_Take_off, Raising_Gear, Lowering_Gear, Checking_before_Landing, Gear_Up}, {"Gear Down", "Checking before Take off", "Raising Gear", "Lowering Gear", "Checking before Landing", "Gear Up"}}
};
int current_state = Gear_Down;
Switch switch_state;
Pilots_lever_state lever_state;
Direction_valve input;
int main() {
// Example inputs for testing
switch_state = LIMIT_SWITCH_CLOSED;
//lever_state = Lever_Down;
// Decision logic based on inputs
if (switch_state == SQUAT_SWITCH_OPENED && lever_state == Lever_Rising_Edge) {
input = Down;
} else if (switch_state == LIMIT_SWITCH_OPENED && lever_state == Lever_Down) {
input = Down;
} else if (lever_state == Lever_Down) {
input = Down;
} else if (lever_state == Lever_Rising_Edge) {
input = wait_rise;
} else if (lever_state == Lever_Up) {
input = Up;
} else if (switch_state == LIMIT_SWITCH_CLOSED) {
input = Control_disabled;
} else if (lever_state == Lever_Falling_Edge) {
input = wait_fall;
}
// Print the current state based on the input
printf("\nCurrent State is: %s\n", state_machine[current_state].state_signal[input]);
// Transition to the next state
current_state = state_machine[current_state].state_types_signal[input];
// Print the output and time
printf("Value of Output is: %d\n", state_machine[current_state].output);
printf("Please wait for: %d sec\n", state_machine[current_state].time);
return 0;
}

logic) The code simulates a state machine for an aircraft landing gear system. Based on the states of various switches and the pilot's lever, it determines the current state and transitions to the next state, printing relevant information at each step. This logic is typical for controlling mechanisms that depend on a sequence of events and conditions.