#include <Wire.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Membuat objek Servo bernama 'servo' untuk mengontrol motor servo
Servo servo;
// Menginisialisasi sudut awal untuk motor servo
int angle = 4;
// Pin sensor ultrasonik
int trig = 27;
int echo = 26;
// Variabel untuk menyimpan pembacaan sensor ultrasonik
long duration;
int distance;
// Pin LED
int ledmerah = 17;
int ledhijau = 16;
void setup() {
// Setel pin LED sebagai OUTPUT
pinMode(ledmerah, OUTPUT);
pinMode(ledhijau, OUTPUT);
// Memulai komunikasi serial untuk debugging
Serial.begin(9600);
// Setel pin sensor ultrasonik
pinMode(echo, INPUT);
pinMode(trig, OUTPUT);
// Menyambungkan servo ke pin 10 dan mengatur sudut awalnya
servo.attach(4);
servo.write(angle);
// lcd
Wire.begin(22, 23);
lcd.init();
lcd.backlight();
lcd.print("UPRAK 2025");
}
void loop() {
// Kirim pulsa pendek untuk memicu sensor ultrasonik
digitalWrite(trig, LOW);
delayMicroseconds(2);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
// Ukur durasi pulsa dari sensor ultrasonik
duration = pulseIn(echo, HIGH);
// Hitung jarak dalam sentimeter menggunakan kecepatan suara
distance = duration / 50;
// Cetak jarak ke Serial Monitor untuk debugging
Serial.print("Jarak: ");
Serial.println(distance);
// Periksa apakah jarak kurang dari 100 cm
if (distance < 100) {
// Jika ada mobil, nyalakan LED hijau dan buka servo
digitalWrite(ledmerah, LOW);
digitalWrite(ledhijau, HIGH);
servo.write(90); // Posisi terbuka
// Tunda selama 1 detik sebelum menutup servo lagi
//delay(1000);
} else {
// Jika tidak ada mobil, nyalakan LED merah dan tutup servo
digitalWrite(ledmerah, HIGH);
digitalWrite(ledhijau, LOW);
servo.write(0); // Posisi tertutup
}
//lcd
lcd.setCursor(1, 0);
lcd.print("UPRAK 2025");
//lcd.print(distance);
//lcd.print(" cm");
lcd.setCursor(0, 1);
lcd.print("Servo: ");
if (servo.read() >= 80) {
lcd.print("Terbuka");
} else {
lcd.print("Tertutup");
}
}