Challenge

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

/****************************************************************************************
 * FILE NAME 	: flight.c
 * Created on 	: 31-Oct-2022
 * Author 		: sarath
 * DESCRIPTION 	: Program for controlling aircrafts landing and retraction gear
 *****************************************************************************************/
#include
#include
#include
typedef enum						//defining the states of gear using enum
{
	gear_down,
	checking_before_takeoff,
	raising_gear,
	gear_up,
	checking_before_landing,
	lowering_gear
}state_type;
typedef enum						//defining indicating lights using enum
{
	off,
	green,
	red
}light;
typedef enum						//defining pilots lever state position
{
	lever_rising,
	lever_up,
	lever_falling,
	lever_down
}lever_state;
typedef enum						//squat switch position definition using enum
{
	closed,
	opened
}squat_state;

int current_state;					//declaration of current state
lever_state pls;					//declaration of pilots lever position
squat_state ss;						//declaration of squat switch position

int main()
{
	current_state= gear_down;
	while(1)
	{
		printf("\nenter squat lever position 0 for closing and 1 opening");
		fflush(stdout);
		scanf("%d",&ss);
		printf("\n enter lever position 0 for lever rising, 1 for lever up, 2 for lever falling, 3 for lever down");
		fflush(stdout);
		scanf("%d",&pls);
		if(ss==closed)					//checking squat switch closed condition i.e grounded plane
		{
			switch(pls)
			{
				case (lever_down):
					printf("\ncurrent state is %s","gear_down");
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","green");
					current_state=gear_down;
					break;
				case (lever_falling):
					printf("\ncurrent state is %s","checking_before_takeoff");
					sleep(3);
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","red");
					current_state=gear_down;
					break;
			}
		}
		else if(ss==opened)				//checking squat switch opened i.w plane is airborn or in transition
		{
			switch(pls)
			{
			case (lever_rising):
				if(current_state==gear_down)
				{
					printf("\ncurrent state is %s","gear_down");
					printf("\nnext state is %s","checking_before_takeoff");
					printf("\nlight is %s","green");
					current_state=checking_before_takeoff;
				}
				else if(current_state==lowering_gear)
				{
					printf("\ncurrent state is %s","lowering_gear");
					printf("\nnext state is %s","checking_before_takeoff");
					printf("\nlight is %s","red");
					current_state=checking_before_takeoff;
				}
				else
					printf("\n the lever position u r entering can only work if ur current state is gear down or lowering gear");
					break;
			case (lever_up) :
				if(current_state==checking_before_takeoff)
				{
					printf("\ncurrent state is %s","checking_before_takeoff");
					sleep(3);
					printf("\nnext state is %s","raising_gear");
					printf("\nlight is %s","red");
					current_state=raising_gear;
				}
				else if(current_state==raising_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","gear_up");
					printf("\nlight is %s","off");
					current_state=gear_up;
				}
				break;
			case (lever_falling):
				if(current_state==raising_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","checking_before_landing");
					printf("\nlight is %s","red");
					current_state=checking_before_landing;
				}
				else if(current_state==gear_up)
				{
					printf("\ncurrent state is %s","gear_up");
					printf("\nnext state is %s","checking_before_landing");
					printf("\nlight is %s","red");
					current_state=checking_before_landing;
				}
				break;
			case (lever_down):
				if(current_state==checking_before_landing)
				{
					printf("\ncurrent state is %s","checking_before_landing");
					sleep(3);
					printf("\nnext state is %s","lowering_gear");
					printf("\nlight is %s","red");
					current_state=lowering_gear;
				}
				else if(current_state==lowering_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","green");
					current_state=gear_down;
				}
				break;
			}
		}
	}
}
//another method using structures and fsm

#include<stdio.h>
#include<string.h>
#include<unistd.h>
typedef enum						//defining the states of gear using enum
{
	gear_down,
	checking_before_takeoff,
	raising_gear,
	gear_up,
	checking_before_landing,
	lowering_gear,
	NONE
}state_type;
typedef enum						//defining indicating lights using enum
{
	off,
	green,
	red,
	NO
}light;
typedef enum						//defining pilots lever state position
{
	lever_rising,
	lever_up,
	lever_falling,
	lever_down
}lever_state;
typedef enum						//squat switch position definition using enum
{
	closed,
	opened
}squat_state;
typedef struct
{
	light indication[4];
	int time;
	state_type lever_position[4];
	char *lever[4];
}state;
state state_machine[6]={{{green,NO,NO,NO},0,{checking_before_takeoff,NONE,NONE,NONE},{"checking_before_takeoff",NONE,NULL,NULL}},
		{{NO,red,NO,NO},3,{NONE,raising_gear,NONE,NONE},{NONE,"raising_gear",NONE,NONE}},
		{{NO,off,red,NO},0,{NONE,gear_up,checking_before_landing,NONE},{NONE,"gear_up","checking_before_landing",NONE}},
		{{NO,NO,red,NO},0,{NONE,NONE,checking_before_landing,NONE},{NONE,NONE,"checking_before_landing",NONE}},
		{{NO,NO,NO,red},3,{NONE,NONE,NONE,lowering_gear},{NONE,NONE,NONE,"lowering_gear"}},
		{{red,NO,NO,green},0,{checking_before_takeoff,NONE,NONE,gear_down},{"checking_before_takeoff",NONE,NONE,"gear_down"}}};

int current_state;					//declaration of current state
lever_state pls;					//declaration of pilots lever position
squat_state ss;						//declaration of squat switch position

int main()
{
	current_state= gear_down;
	while(1)
	{
		printf("\nenter squat lever position 0 for closing and 1 opening");
		fflush(stdout);
		scanf("%d",&ss);
		printf("\n enter lever position 0 for lever rising, 1 for lever up, 2 for lever falling, 3 for lever down");
		fflush(stdout);
		scanf("%d",&pls);
		if(ss==closed)					//checking squat switch closed condition i.e grounded plane
		{
			switch(pls)
			{
				case (lever_down):
					printf("\ncurrent state is %s","gear_down");
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","green");
					current_state=state_machine[current_state].lever_position[pls];
					break;
				case (lever_falling):
					printf("\ncurrent state is %s","checking_before_takeoff");
					sleep(3);
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
					break;
			}
		}
		else if(ss==opened)				//checking squat switch opened i.w plane is airborn or in transition
		{
			switch(pls)
			{
			case (lever_rising):				//including lever position as input for cases and getting state deatils
				if(current_state==gear_down)
				{
					printf("\ncurrent state is %s","gear_down");
					printf("\nnext state is %s","checking_before_takeoff");
					printf("\nlight is %s","green");
					current_state=state_machine[current_state].lever_position[pls];		//assigning new state to current state
				}
				else if(current_state==lowering_gear)
				{
					printf("\ncurrent state is %s","lowering_gear");
					printf("\nnext state is %s","checking_before_takeoff");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
				}
				else
					printf("\n the lever position u r entering can only work if ur current state is gear down or lowering gear");
					break;
			case (lever_up) :
				if(current_state==checking_before_takeoff)
				{
					printf("\ncurrent state is %s","checking_before_takeoff");
					sleep(3);
					printf("\nnext state is %s","raising_gear");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
				}
				else if(current_state==raising_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","gear_up");
					printf("\nlight is %s","off");
					current_state=state_machine[current_state].lever_position[pls];
				}
				break;
			case (lever_falling):
				if(current_state==raising_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","checking_before_landing");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
				}
				else if(current_state==gear_up)
				{
					printf("\ncurrent state is %s","gear_up");
					printf("\nnext state is %s","checking_before_landing");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
				}
				break;
			case (lever_down):
				if(current_state==checking_before_landing)
				{
					printf("\ncurrent state is %s","checking_before_landing");
					sleep(3);
					printf("\nnext state is %s","lowering_gear");
					printf("\nlight is %s","red");
					current_state=state_machine[current_state].lever_position[pls];
				}
				else if(current_state==lowering_gear)
				{
					printf("\ncurrent state is %s","raising_gear");
					printf("\nnext state is %s","gear_down");
					printf("\nlight is %s","green");
					current_state=state_machine[current_state].lever_position[pls];
				}
				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.