Challenge

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

/*
 * plane.c
 *
 *  Created on: May 13, 2023
 *      Author: GHULAM SAMDANI
 */

#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<string.h>
void Initiate_State_Machine();
void Gear_down();
void Checking_Before_TakeOFF_delay_3s();
void Raising_Gear();
void Gear_up();
void Checking_before_landing();
void Lowering_gear();
typedef enum
{
    GEAR_DOWN,
    CHECKING_BEFORE_TAKEOFF_DELAY_3S,
    RAISING_GEAR,
    GEAR_UP,
    CHECKING_BEFORE_LANDING,
    LOWERING_GEAR
}State_Types;
typedef enum
{
  open,                                     // value 0
  close                                     // value 1
}Switch;
typedef enum
{
    raising,            //value 0
    falling,            //value 1
	up,                 //value 2
	down                //value 3
}pilot_Lever;
typedef enum
{
    Working,
    Not_working
}Hydralic;
static volatile Switch limit_switch,squat_switch;
static volatile pilot_Lever pil;
static volatile Hydralic operation;
State_Types current_state;
typedef struct
{
    char* currentstate;
    char* lightvalue;
    char* directionValve;
    char* Hydraliccontrol;
}state;
static void(*state1[])(void)={Gear_down,Checking_Before_TakeOFF_delay_3s,Raising_Gear,Gear_up,Checking_before_landing,Lowering_gear};
state state_machine[6]={{"GearDown", "Green", "Down", "Enabled"},
		{"Checkingbeforetakeoff", "Green","Down", "Enabled"},
        {"Raising Gear", "Red", "Up", "Enabled"},
		{"Gearup", "off", "Null", "Disabled"},
		{"Checking before landing", "Red","Down", "Enabled"},
        {"Loweringgear", "Green", "Down", "Enabled"}};
int main()
{
	Initiate_State_Machine();
    while(1)
    {
      state1[current_state]();
    }
}
void Initiate_State_Machine()
 {
	current_state = GEAR_DOWN;
	printf("The Finite State Machine is Initialized and current the program is in"
			"GEARDOWN State & Light is: %s\n",state_machine[current_state].lightvalue);
 }

 void Gear_down()
{
    current_state=GEAR_DOWN;
    printf("Enter the values of pil and Squatswitch: ");
    fflush(stdout);
    scanf("%d %d",&pil,&squat_switch);
    if(pil==raising && squat_switch==close)
    {
        current_state=CHECKING_BEFORE_TAKEOFF_DELAY_3S;
        printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    }
    else
    {
    	Gear_down();
    }
}
 void Checking_Before_TakeOFF_delay_3s()
    {
    	current_state= CHECKING_BEFORE_TAKEOFF_DELAY_3S;
    	printf("\nEnter the values of pil and Squatswitch and operation");
    	fflush(stdout);
    	scanf("%d %d %d",&pil,&squat_switch,&operation);
    	if(pil==falling && squat_switch==close)
    	{
    		current_state=GEAR_DOWN;
    		printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    		        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    		        printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
    		        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
    	}
    	if(pil==raising && operation==Working)
    	{
    		current_state=RAISING_GEAR;
    		printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    		        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    		        printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
    		        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
    	}
    	else
    	{
    		Checking_Before_TakeOFF_delay_3s();
    	}
    }
 void Raising_Gear()
    {
     current_state=RAISING_GEAR;
     printf("\nEnter the values of pil and limit_switch");
     fflush(stdout);
     scanf("%d %d",&pil,&limit_switch);
     if(pil==falling && limit_switch == open)
     {
    	 current_state=CHECKING_BEFORE_LANDING;
    	 printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    	         printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    	         printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
    	         printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
     }
    if(pil==up &&limit_switch==close)
    {
    	current_state=GEAR_UP;
    	printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    	        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    	        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
    }
    else
    {
    	Raising_Gear();
    }
    }
 void Gear_up()
    {
    	current_state=GEAR_UP;
    	printf("\nEnter the values of pil ");
    	fflush(stdout);
    	scanf("%d",&pil);
    	if(pil==falling)
    	{
    		current_state=CHECKING_BEFORE_LANDING;
    		printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    		        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    		        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
    	}
    	else
    	{
    		Gear_up();
    	}
    }
 void Checking_before_landing()
    {
    	current_state=CHECKING_BEFORE_LANDING;
    	printf("\nEnter the values of pil and operation");
    	fflush(stdout);
    	scanf("%d %d",&pil,&operation);
    	if(pil==falling || operation==Not_working)
    	{
    		current_state=LOWERING_GEAR;
    		printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
    		        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
    		        printf("\n status of directionValve is %s",state_machine[current_state].directionValve);
    		        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
    		    	}
    	else
    	{
    		Checking_before_landing();
    	}
    	}
void Lowering_gear()
{
	current_state=LOWERING_GEAR;
	printf("\nEnter the values of pil and limit_switch");
	fflush(stdout);
	scanf("%d %d",&pil,&limit_switch);
	if(pil == down && limit_switch==open)
	{
		current_state=GEAR_DOWN;
		        printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
		        printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
		        printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
	}
	if(pil==raising && limit_switch == close)
	{
		current_state=CHECKING_BEFORE_TAKEOFF_DELAY_3S;
		printf("\n status of currentstate is %s",state_machine[current_state].currentstate);
		printf("\n status of lightvalue is %s",state_machine[current_state].lightvalue);
		printf("\n status of Hydraliccontrol is %s",state_machine[current_state].Hydraliccontrol);
	}
	else
	{
		Lowering_gear();
	}
}


Output
The Finite State Machine is Initialized and current the program is inGEARDOWN State & Light is: Green
Enter the values of pil and Squatswitch: 0
1

 status of currentstate is Checkingbeforetakeoff
 status of lightvalue is Green
Enter the values of pil and Squatswitch and operation1
0
0

Enter the values of pil and Squatswitch and operation1
0
1

Enter the values of pil and Squatswitch and operation0
1
0

 status of currentstate is Raising Gear
 status of lightvalue is Red
 status of directionValve is Up
 status of Hydraliccontrol is Enabled
Enter the values of pil and limit_switch
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.