All Courses
All Courses
Courses by Software
Courses by Semester
Courses by Domain
Tool-focused Courses
Machine learning
POPULAR COURSES
Success Stories
Q: In this project, controlling the retraction and extension of Airplane’s landing gear can be implemented using Finite State Machine (FSM). FSM is the most efficient algorithm which is mathematical model of computation. Ans: Aim: To write a program to control the retraction and extension of the Airplane's landing gear…
Chandrakumar ADEPU
updated on 27 Jan 2023
Q: In this project, controlling the retraction and extension of Airplane’s landing gear can be implemented using Finite State Machine (FSM). FSM is the most efficient algorithm which is mathematical model of computation.
Ans:
Aim:
To write a program to control the retraction and extension of the Airplane's landing gear can be implemented using finite state machine (FSM).
Code / Program:
main.c:
/*
* main.c
*
* Created on: 26-Jan-2023
* Author: chand
*/
#include //header//
#include "states.h" //header//
static void (*state_table[])(void) = {Gear_Down,Checking_Before_Takeoff,Raising_Gear,
Gear_Up,Checking_Before_Landing,Lowering_Gear}; //inputs based some condition//
int main()
{
Init_State_Machine(); //while loop start hear//
while(1)
{
state_table[current_state]();
}
}
states.h
/*
* states.h
*
* Created on: 26-Jan-2023
* Author: chand
*/
#ifndef STATES_H_
#define STATES_H_
void Init_State_machine(); //function delcarartion// // void is used to function return type//
void Gear_Down();
void Checking_Before_Takeoff();
void Raising_Gear();
void Gear_Up();
void Checking_Before_Landing();
void Lowering_Gear();
typedef enum State // A type def means declaring the alternative names//
{
GR_DWN, //here calling the different states //
CHK_BFR_TKFF,
RSING_GR,
GR_UP,
CHK_BFR_LND,
LWRNG_GR
}State_Type;
typedef enum Switch
{
Open, //here calling the different switch//
Close
}Switch_Status;
typedef enum Pilot_Lever
{
Rising,
Falling, //here calling the different pilot_lever//
UP,
DOWN
}Pilot_Lever_Status;
typedef enum Hydraulic_Mechanism
{
Working,
Malfunctioning //here calling the different hydraulic_ machanism//
}Hydraulic_Mechanism_Status;
static volatile Switch_Status squat_switch; //A function that has a scope that is limited to its object file//
static volatile Switch_Status limit_switch;
static volatile Pilot_Lever_Status pilot_lever;
static volatile Hydraulic_Mechanism_Status hydraulic_mechanism;
State_Type current_state;
typedef struct
{
char* current_state_indication; //calling the status of the struct//
char* light_Status;
char* direction_value_status;
char* hydraulic_pump_control_status;
char* gas_pressurized_spring_status[2];
}State_Table;
static State_Table State_Machine[6] = { //calling the state_ Table//
{"GearDown","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"}}
};
# endif /* STATES_H_ */ //end//
void Init_State_Machine() //function declaration//
{
current_state = GR_DWN; //In GEAR_DOWN light =GREEN//
printf("\nState Machine is initialized & Program is in Gear_Down State & Light_Status : %s\n",State_Machine[current_state].light_Status);
} //header//
void Gear_Down(void) //function delcaration//
{
current_state = GR_DWN; //gear down starts//
printf("\n Enter the Pilot's Lever Position and Squat Switch Status:");
fflush(stdout);
scanf("%d %d",&pilot_lever,&squat_switch);
if (pilot_lever == Rising && squat_switch == Open) //GEAR_down =rising -(0) and open-(0)//
{
current_state = CHK_BFR_TKFF;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
}
else
{
Gear_Down();
}
}
void Checking_Before_Takeoff()//function declarartion//
{
current_state = CHK_BFR_TKFF;
printf("\n Enter the Pilot's Lever Position,Squat Switch Status and Hydraulic Mechanism Status:");//console//
fflush(stdout);
scanf("%d %d %d",&pilot_lever,&squat_switch,&hydraulic_mechanism);//reads the address//
printf("\n Wait for 3 secs\n");
if(pilot_lever == Falling || squat_switch == Close)
{
Gear_Down();
}
else if (pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Working)
{ //chk_bfr_tkf= up(2),squat_switch=(0) and working=(0)//
current_state = RSING_GR;
printf("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Value Status:%s\n\n",State_Machine[current_state].direction_value_status);
}
else if (pilot_lever == UP && squat_switch == Open && hydraulic_mechanism == Malfunctioning)
{ //chk_bfr_tkf= up(2),squat_switch=(0) and working=(1)//
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Value Status:%s\n",State_Machine[current_state].direction_value_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
}
void Raising_Gear() //function declarartion//
{
current_state = RSING_GR;
printf("\n Enter the Limit Switch Status, Pilot's Lever Position :");// enter the console of t limt switch and pilot lever posistions//
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever); // read the address//
printf("\nWait for 1 sec\n");
if(pilot_lever == Falling && limit_switch == Open) //if statment will starts//
{
current_state = CHK_BFR_LND;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else if (limit_switch == Close && pilot_lever == UP) //chk_bfr_lnd= close(1) and pilot_lever =(2)//
{
current_state = GR_UP;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Raising_Gear();
}
}
void Gear_Up() //function declaration//
{
current_state = GR_UP;
printf("\n Enter the Pilot's Lever Position:"); //enter the cosole pilot lever position//
fflush(stdout);
scanf("%d",&pilot_lever); //reads the address//
if(pilot_lever ==Falling) // if statement will starts// //pilot_lever == falling means "1"//
{
current_state = CHK_BFR_LND;
printf("\n Current State:%s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Gear_Up();
}
}
void Checking_Before_Landing() //function declaration//
{
current_state = CHK_BFR_LND;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("\nEnter the Pilot's Lever Position and Status of Hydraulic Mechanism:"); // print the console//
fflush(stdout);
scanf("%d %d",&pilot_lever,&hydraulic_mechanism); //reads the address//
if(pilot_lever == DOWN && hydraulic_mechanism == Working)
{
current_state = LWRNG_GR;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_value_status);
}
else if(pilot_lever == DOWN && hydraulic_mechanism == Malfunctioning) // pilot_ lever= down(3)and hydr_mech=malfun(1)//
{
current_state = LWRNG_GR;
printf("\nCurrent State : %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
printf("Direction Valve Status:%s\n",State_Machine[current_state].direction_value_status);
printf("Gas Pressurized Spring System Status:%s\n",State_Machine[current_state].gas_pressurized_spring_status[hydraulic_mechanism]);
}
if(pilot_lever == (UP || Rising || Falling))
{
Checking_Before_Landing();
}
}
void Lowering_Gear() //function declarartion//
{
current_state = LWRNG_GR;
printf("\n Enter the Limit_Switch Status,Pilot_Lever Status ::"); //enter the console//
fflush(stdout);
scanf("%d %d",&limit_switch,&pilot_lever); //reads the address//
if( limit_switch == Close && pilot_lever == Rising) // limit_switch =close(1) and pilot__ lever=rising(0)//
{
current_state = CHK_BFR_TKFF;
printf("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf("Light Status:%s\n",State_Machine[current_state].light_Status);
}
if(limit_switch == Open && pilot_lever == DOWN)
{
current_state = GR_DWN;
printf ("\n Current State: %s\n",State_Machine[current_state].current_state_indication);
printf ("Light Status:%s\n",State_Machine[current_state].light_Status);
printf ("Hydraulic Control for Landing Gear Status:%s\n",State_Machine[current_state].hydraulic_pump_control_status);
}
else
{
Lowering_Gear();
}
}
Output:
Leave a comment
Thanks for choosing to leave a comment. Please keep in mind that all the comments are moderated as per our comment policy, and your email will not be published for privacy reasons. Please leave a personal & meaningful conversation.
Other comments...
Week - 4
Implement control logic of a “washing machine” using Stateflow as per given sequence: If the power supply is available, the system gets activated If the Water supply is not available, stop the process & indicate through LED Soaking time should be 200s followed by Washing time of 100s. Then rinsing…
29 Sep 2023 07:17 AM IST
Project 2 - V&V SW Analysis II
Q:- 1. Perform Static Code Review Analysis for “C:\**\LDRA_workarea\Examples\C_Testbed_examples\Testrain\Testrain.c” Generate Code review report and upload them. Ans: Aim: To gernetate the code review report and upload them. Steps: Steps for White box testing:- Source ->…
18 Aug 2023 01:16 PM IST
Project 1 - V&V SW Analysis - I
Q:- Write a Test plan to test features of a new mobile phone (Blackbox test) that needs to be implemented based on the following requirements. (The product is still under development stage and is yet to be UA (User Acceptance ) tested…
12 Jul 2023 03:17 AM IST
Project 2 - Measuring distance of an object using ultrasonic sensor (HC-SR04)
PROJECT-2: Aim: To write a program to measure the distance using ultasonic sensot Schematic Diagram: Steps of Programming ATmega16 microcontroller needs to transmit at least 10 us trigger pulse to the HC-SR04 Trig Pin. After getting a trigger pulse, HC-SR04 automatically sends eight 40 kHz sound waves and the microcontroller…
24 Jun 2023 09:50 AM IST
Related Courses
0 Hours of Content
Skill-Lync offers industry relevant advanced engineering courses for engineering students by partnering with industry experts.
© 2025 Skill-Lync Inc. All Rights Reserved.