/****************************************************************************************
* 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;
}
}
}
}