#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo front;
Servo back;
LiquidCrystal_I2C lcd(0x27, 20, 4);
int echo = 4;
int trig = 5;
int echo1 = 2;
int trig1 = 3;
long distance;
long distance1;
long duration;
long duration1;
bool frontDoorState = true;
bool lightsState = true;
int IR = 10;
int IR1 = 11;
int relayFront = 8;
int relayBack = 7;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("WELCOME");
pinMode(echo, INPUT);
pinMode(echo1, INPUT);
pinMode(trig, OUTPUT);
pinMode(trig1, OUTPUT);
pinMode(IR, INPUT);
pinMode(IR1, INPUT);
pinMode(relayFront, OUTPUT);
pinMode(relayBack, OUTPUT);
front.attach(6);
back.attach(9);
}
void loop() {
int IRVal = digitalRead(IR);
int IRVal1 = digitalRead(IR1);
digitalWrite(trig, LOW);
delay(10);
digitalWrite(trig, HIGH);
delay(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
distance = duration * 0.034 / 2;
digitalWrite(trig1, LOW);
delay(10);
digitalWrite(trig1, HIGH);
delay(10);
digitalWrite(trig1, LOW);
duration1 = pulseIn(echo1, HIGH);
distance1 = duration1 * 0.034 / 2;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Distance ");
lcd.print(distance);
lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Distance1 ");
lcd.print(distance1);
lcd.print(" cm");
if (distance <= 30 && distance > 0) {
if (frontDoorState) {
openFrontDoor();
frontDoorState = false;
} else {
frontDoorState = true;
}
}
if (distance1 <= 30 && distance1 > 0) {
if (frontDoorState) {
openBackDoor();
frontDoorState = false;
} else {
frontDoorState = true;
}
}
if (IRVal == 0) {
lightsOn();
}
if (IRVal1 == 0) {
lightsOff();
}
}
void openFrontDoor() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("FRONT ENTRY");
for (int i = 90; i >= 0; i--) {
front.write(i);
delay(10);
}
delay(2000);
for (int i = 0; i <= 90; i++) {
front.write(i);
delay(10);
}
}
void openBackDoor() {
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("BACK ENTRY");
for (int i = 90; i >= 0; i--) {
back.write(i);
delay(10);
}
delay(20000);
for (int i = 0; i <= 90; i++) {
back.write(i);
delay(10);
}
}
void lightsOn() {
digitalWrite(relayFront, LOW);
digitalWrite(relayBack, LOW);
lcd.setCursor(5, 1);
lcd.print("LIGHTS ON");
delay(2000);
}
void lightsOff() {
digitalWrite(relayFront, HIGH);
digitalWrite(relayBack, HIGH);
lcd.setCursor(5, 1);
lcd.print("LIGHTS OFF");
delay(2000);
}