#include <Servo.h>
#include <LiquidCrystal_I2C.h>

const int trigPin = 9;    // Pin trigger sensor ultrasonik
const int echoPin = 10;   // Pin echo sensor ultrasonik
const int servoPin = 6;   // Pin servo motor
const int ledPin = 7;     // Pin lampu LED
const int safetyDistance = 20; // Jarak aman untuk membuka pintu (dalam cm)

Servo myServo;            // Objek servo motor
LiquidCrystal_I2C lcd(0x27, 16, 2);  // Alamat I2C LCD

void setup() {
  Serial.begin(9600);
  
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(ledPin, OUTPUT);

  myServo.attach(servoPin);
  lcd.begin(16, 2);
  lcd.print("Palang Pintu");
  lcd.setCursor(0, 1);
  lcd.print("Otomatis");
  delay(2000);
  lcd.clear();
}

void loop() {
  long duration, distance;
  
  // Trigger ultrasonik untuk mengukur jarak
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  
  duration = pulseIn(echoPin, HIGH);
  
  // Menghitung jarak berdasarkan waktu perjalanan gelombang ultrasonik
  distance = (duration / 2) / 29.1;
  
  Serial.print("Jarak: ");
  Serial.print(distance);
  Serial.println("0 cm");

  // Jika jarak kurang dari safetyDistance, buka pintu
  if (distance < safetyDistance) {
    lcd.clear();
    lcd.print("Pintu Terbuka");
    lcd.setCursor(0, 1);
    lcd.print("Selamat Datang!");
    openDoor();
    digitalWrite(ledPin, HIGH); // Nyalakan lampu LED
  } else {
    lcd.clear();
    lcd.print("Pintu Tertutup");
    closeDoor();
    digitalWrite(ledPin, LOW); // Matikan lampu LED
  }

  delay(1000);
}

void openDoor() {
  myServo.write(90);  // Menggerakkan servo untuk membuka pintu
  delay(2000);        // Tahan pintu terbuka selama 2 detik
}

void closeDoor() {
  myServo.write(0);   // Menggerakkan servo untuk menutup pintu
}
$abcdeabcde151015202530354045505560fghijfghij
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
r2:1
r2:2
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
servo1:GND
servo1:V+
servo1:PWM
led2:A
led2:C
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL