#include <Servo.h> // servo library
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,10,9,8,7); // LCD library
Servo s1, s2 ,s3,s4;
const int GREEN_LED = 4; // green LED pin
const int RED_LED = 6; // red LED pin
const int YELLOW_LED = 2; // red LED pin
const int BUZZER = 3; // buzzer pin
int irSensor1Pin = A0;
int irSensor2Pin = A1;
int irSensor3Pin = A2;
int val = 0;//Train Departure
int va2 = 0;//Train Arrival
int va3 = 0;//Obstacle detection
void setup() {
Serial.begin(9600); // sensor buart rate
pinMode(irSensor1Pin, INPUT); // IR sensor 1
pinMode(irSensor2Pin, INPUT); // IR sensor 2
pinMode(irSensor3Pin, INPUT); // IR sensor 3 Obstacle
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
pinMode(YELLOW_LED, OUTPUT);
pinMode(BUZZER, OUTPUT);
s1.attach(A3); // Servo Connect 9 pin
s2.attach(A4); // Servo Connect 9 pin
s3.attach(A5); // Servo Connect 9 pin
s4.attach(13); // Servo Connect 9 pin
s1.write(0);
s2.write(0);
s3.write(0);
s4.write(0);
}
void loop() {
val = digitalRead(irSensor1Pin); // IR sensor 1 output pin connected
va2 = digitalRead(irSensor2Pin); // IR sensor 2 output pin connected
va3 = digitalRead(irSensor3Pin); // IR sensor 2 output pin connected
Serial.println(val); // see the value in serial monitor in Arduino IDE
Serial.println(va2); // see the value in serial monitor in Arduino IDE
delay(200); // Time Delay
if (va3 == 1) {//ARRIVAL OF the train
s1.write(0); // SERVO 0 DEGREE
s2.write(0);
s3.write(0);
s4.write(0);
lcd.begin(16, 2);
lcd.print("Train Coming:");
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
delay(2000);
}
if (va3 == 1&& va2==1 && val == 1) {//IF the trained arrived and No obstacle detected
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, HIGH);
delay(2000);
s1.write(90); // SERVO 90 DEGREE
s2.write(90);
s3.write(90);
s4.write(90);
lcd.begin(16, 2);
lcd.print("No Object: Train Com");
delay(2000);
digitalWrite(BUZZER, HIGH);
delay(2000);
digitalWrite(BUZZER, LOW);
}
if (va3 == 1&& va2==0 && val == 1); { //IF the trained arrived and obstacle detected
digitalWrite(GREEN_LED, LOW);
digitalWrite(RED_LED, HIGH);
digitalWrite(YELLOW_LED, LOW);
delay(2000);
lcd.print("Detected: WAIT");
lcd.print(": CLEAR");
delay(2000);
lcd.print(": CLEAR");
s1.write(90); // SERVO 90 DEGREE
s2.write(90);
s3.write(90);
s4.write(90);
lcd.begin(16, 2);
digitalWrite(BUZZER, HIGH);
delay(2000);
digitalWrite(BUZZER, LOW);
}
if (va3 == 0&& va2==1 && val == 1) { //IF obstacle detected and no train
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
delay(2000);
lcd.print("Remain Open");
delay(2000);
s1.write(90); // SERVO 90 DEGREE
s2.write(90);
s3.write(90);
s4.write(90);
lcd.begin(16, 2);
digitalWrite(BUZZER, LOW);
delay(2000);
digitalWrite(BUZZER, LOW);
}if (va3 == 0&& va2==0 && val == 1) { //IF no obstacle detected and no train
digitalWrite(GREEN_LED, HIGH);
digitalWrite(RED_LED, LOW);
digitalWrite(YELLOW_LED, LOW);
delay(2000);
lcd.print("Remain Open");
delay(2000);
s1.write(90); // SERVO 90 DEGREE
s2.write(90);
s3.write(90);
s4.write(90);
lcd.begin(16, 2);
digitalWrite(BUZZER, LOW);
delay(2000);
digitalWrite(BUZZER, LOW);
}
if (val == 1) {//DEPARTURE OF the train
s1.write(0); // SERVO 0 DEGREE
s2.write(0);
s3.write(0);
s4.write(0);
lcd.begin(16, 2);
lcd.print("DEPARTED:");
delay(2000);
digitalWrite(RED_LED, LOW);
digitalWrite(BUZZER, LOW);
digitalWrite(YELLOW_LED, LOW);
digitalWrite(GREEN_LED, HIGH);
delay(2000);
}
}