#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <TM1637Display.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int data= 12;
int clock = 7;
TM1637Display display(clock, data);
Servo servo1;
Servo servo2;
int pot1 =A0;
int pot2 =A1;
int pot3=A2;
int pot4 =A3;
const int echoPin = 3;
const int trigPin = 2;
const int greenPin = 10;
const int redPin = 11;
const int buzzerPin = 13;
const int servoPin1 = 5;
const int servoPin2 = 6;
long duration;
int distance;
int secret[4]={1,2,3,4};
void setup() {
// 1. Setup Pins
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(redPin, OUTPUT);
pinMode(greenPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// 2. Attach Servos
servo1.attach(servoPin1);
servo2.attach(servoPin2);
servo1.write(180);
servo2.write(0);
// 3. Initialize LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Dist: cm");
display.setBrightness(1);
}
void loop() {
int digit1 = map(analogRead(pot1), 0, 1023, 0, 9);
int digit2 = map(analogRead(pot2), 0, 1023, 0, 9);
int digit3 = map(analogRead(pot3), 0, 1023, 0, 9);
int digit4 = map(analogRead(pot4), 0, 1023, 0, 9);
int code = digit1*1000+ digit2*100+digit3*10+digit4*1;
display.showNumberDec(code);
// put your main code here, to run repeatedly:
// A. Read Ultrasonic Sensor (Distance) ---
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
if(distance>200){
analogWrite(redPin, 255);
analogWrite(greenPin, 0);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Closing doors!");
servo1.write(180);
servo2.write(0);
}else{
analogWrite(redPin, 0);
analogWrite(greenPin, 255);
lcd.setCursor(0,1);
lcd.print("Enter code: ");
if(digit1==secret[0] &&
digit2==secret[1] &&
digit3==secret[2] &&
digit4==secret[3]){
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Right code!");
delay(2000);
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Opening doors!");
servo1.write(90);
servo2.write(90);
}
else{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("Wrong code!!");
servo1.write(180);
servo2.write(0);
}
}
lcd.setCursor(6, 0);
lcd.print(" "); // Clean previous number
lcd.setCursor(6, 0);
lcd.print(distance);
delay(300);
}