#include <Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD(0x27,20,4);
Servo lServo;
Servo rServo;
#define leftServo 10
#define rightServo 9
#define trig 7
#define echo 6
#define buzz 5
#define red 4
#define green 3
#define blue 2
int left=0;
int right=0;
int count=0;
void setup() {
LCD.init();
LCD.print("***Automatic Gate***");
LCD.setCursor(0,1);
LCD.print("by -Bunyisa Wongwai-");
LCD.setCursor(0,2);
LCD.print("Gate Status : ######");
lServo.attach(leftServo);
rServo.attach(rightServo);
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(buzz, OUTPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
}
int calcDist(){
digitalWrite(trig, HIGH);
delay(50);
digitalWrite(trig, LOW);
int cm=pulseIn(echo,HIGH)/58;
return cm;
}
void showDist(){
int cm=calcDist();
LCD.setCursor(1,3);
LCD.print("Distance :");
LCD.print(cm);
if(cm<10){
LCD.print("cm. ");
}else if ("cm<100"){
LCD.print("cm. ");
}else{
LCD.print(" cm.");
}
}
void openGate(){
right=0;
left=180;
rgbLight(0,1,0);
while (count>=0){
rServo.write(right);
lServo.write(left);
delay(10);
right++;
left--;
count--;
}
}
void closeGate(){
right=90;
left=90;
rgbLight(1,0,0);
while (count<=90){
rServo.write(right);
lServo.write(left);
delay(10);
right--;
left++;
count++;
}
}
void rgbLight(int r,int g,int b){
digitalWrite(red,r);
digitalWrite(green,g);
digitalWrite(blue,b);
}
void loop() {
int cm=calcDist();
showDist();
if(cm<=10){
delay(3000);
closeGate();
}else if (cm<=100){
openGate();
}else{
closeGate();
}
}