Project 2 - Implement the Code for controlling the retraction and extension of Airplane’s landing gear
/*
* poject2_fsm.c
*
* Created on: Dec 17, 2022
* Author: ROHIT
*/
//Preprocessor section header files
#include
#include
//defining function
void gear_down();
void check_before_takeoff();
void raising_gear();
void gear_up();
void check_before_landing();
void lowering_gear();
//enum
typedef enum
{
geardown,
checkbeforetakeoff,
raisinggear,
gearup,
checkbeforelanding,
loweringgear
}state_type;
typedef enum
{
open,
close,
}switch_state;
typedef enum
{
down,//0
up,//1
rising,//2
falling//3
}lever;
typedef enum
{
Disabled,
Enabled,
}hydrolic;
static volatile switch_state squat,limit;
static volatile lever pil;
static volatile hydrolic hyd;
state_type current_state;
typedef struct
{
char* statename;
char* light;
char* directionvalve;
char* hydrolic_valve;
}detail;
static void(*state_table[])(void)={gear_down,check_before_takeoff,raising_gear,gear_up,
check_before_landing,lowering_gear};
static detail state_machine[6]=
{
{"GearDown", "Green", "Down", "Enabled"},
{"Checkingbefore takeoff", "Green","Down", "Enabled"},
{"Raising Gear", "Red","Up", "Enabled"},
{"Gearup", "off", "Null", "Disabled"},
{"Checking before landing", "Red","Down", "Enabled" },
{"Loweringgear", "Green", "Down","Enabled"}
};
//main function
int main()
{
current_state=geardown;
while(1)
{
state_table[current_state]();
printf("\nin next step \n");
}
}
//function definition gear_down()
void gear_down()
{
current_state=geardown;
printf("current state is %s",state_machine[current_state].statename);
printf("\nis pilot lever rising =2 or falling=3:-");
fflush(stdout);
scanf("%f",&pil);
printf("is squat switch opened=0 or closed=1:-");
fflush(stdout);
scanf("%f",&squat);
if((pil==rising)&&(squat==open))
{
current_state=checkbeforetakeoff;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else
{
gear_down();
}
}
//function definition void check_before_take_off()
void check_before_takeoff()
{
printf("is pilot lever up=1 or falling=3");
fflush(stdout);
scanf("%d",&pil);
if(pil==up)
{
current_state=raisinggear;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else if(pil==falling)
{
gear_down();
}
else
{
check_before_takeoff();
}
}
//function definition void rising_gear()
void raising_gear()
{
current_state=raisinggear;
printf("is pilot lever or falling=3 or up=1");
fflush(stdout);
scanf("%d",&pil);
if(pil==falling)
{
current_state=checkbeforelanding;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else if(pil==up)
{
current_state=gearup;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else
{
raising_gear();
}
}
//function definition void gear_up()
void gear_up()
{
current_state=gearup;
printf("is pilot lever falling=3");
fflush(stdout);
scanf("%d",&pil);
if(pil==falling)
{
current_state=checkbeforelanding;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else
{
gear_up();
}
}
//function definition void check_before_landing()
void check_before_landing()
{
current_state=checkbeforelanding;
printf("is pilot lever down=0");
fflush(stdout);
scanf("%d",&pil);
if(pil==down)
{
current_state=loweringgear;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else
{
check_before_landing();
}
}
void lowering_gear()
{
current_state=loweringgear;
printf("\nis pilot lever rising =2 ");
fflush(stdout);
scanf("%d",&pil);
printf("is limit switch opened=0");
fflush(stdout);
scanf("%d",&limit);
if(pil==rising)
{
current_state=checkbeforetakeoff;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
else if(limit==open)
{
current_state=geardown;
printf("current state is %s",state_machine[current_state].statename);
fflush(stdout);
printf("\nlight is %s",state_machine[current_state].light);
fflush(stdout);
printf("\ndirection valve is %s",state_machine[current_state].directionvalve);
fflush(stdout);
printf("\nhydrolic valve is %s\n",state_machine[current_state].hydrolic_valve);
fflush(stdout);
}
}