Challenge

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

#include

#include

void Intial_state_machine();

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,

    close

}

Switch_status;

typedef enum pilot_lever

{

    raising,

    falling,

    up,

    down 

}

pilot_lever_status;

typedef enum hydraulic_mechanism

{

    working,

    malfunctioning

}

hydraulic_mechanism_status;

static volatile Switch_status squat_switch;

static volatile Switch_status limit_switch;

static volatile pilot_lever_status pilot_lever;

static volatile pilot_lever_status hydraulic_mechanism;

state_type current_state;

typedef struct

{

    char* current_state_status;

char* light_status;

char* direction_value_status;

char* hydraulic_pump_ctrl_status;

char* gas_pressurized_spring_status[2];

}

state_table;

static state_table state_machine[6] = {

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

void Intial_state_machine()

{

    current_state = GEAR_DOWN;

    printf("\n state machine is initials and at first program is in gear down and its light status is:%s\n",

    state_machine[current_state].light_status);

}

void Gear_down(void)

{

    current_state =GEAR_DOWN;

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

    fflush(stdout);

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

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

    {

        current_state = CHECK_BEFORE_TAKEOFF;

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

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

    }

    else

{

    Gear_down();

}

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("\nlight 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 pressurised spring status:%s\n",state_machine[curent_state].gas_pressurized_spring_status[hydraulic_mechanism]);

}

void Raising_gear()

{

    current_state = RAISING_GEAR;

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

    fflush(stdout);

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

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

    if(pilot_lever == faling && 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("\nHydraulic 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("\nHydraulic condition for landing gear status is %s\n",state_machinr[current_state].hydraulic_pump_ctrl_status);

    }

    else 

    {

        Raising_gear();

    void Checking_before_landing()

    {

        current_state= CHECK_BEFORE_LANDING;

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

        fflush(stdout);

        scanf("%d %d",&pilot_lever, &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("\nlight status:%s\n", state_machine[current_state].light_status);

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

        }

    else if (pilot_levet== 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[currnt_state].light_status);

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

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

    }

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

    {

        Checking_before_landing();

    }

    }

    void Lowering_gear()

    {

        current_state= LOWERING_GEAR;

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

        fflush(stdout);

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

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

        {

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

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

        }

    }

    if (pilot_lever== sown && 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_staus);

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

    }

    else

    {

        Lowering_gear();

    }

    }

    int main()

    {

        Intial_state_machine();

        while(1)

    {

        State_Table[current_state]();

    }

    }

    comment for this priprogramme is use of the if else condition 

by the use of finite state machine solve this programme.

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.