#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
// Inisialisasi LCD dengan alamat I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Inisialisasi sensor ultrasonik
const int trigPin = 3;
const int echoPin = 2;
// Inisialisasi servo motor
Servo myServo;
const int servoPin = 11;
// Variabel untuk jarak dan jumlah kendaraan
long duration;
int distance;
int vehicleCount = 0;
void setup() {
// Setup untuk komunikasi LCD
lcd.begin(16,2);
lcd.backlight();
// Setup pin untuk sensor ultrasonik
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Setup servo motor
myServo.attach(servoPin);
myServo.write(0); // Posisi servo tertutup
// Tampilkan pesan awal di LCD
lcd.setCursor(0, 0);
lcd.print("Palang Otomatis");
lcd.setCursor(0, 1);
lcd.print("Kendaraan: 0");
delay(2000); // Tampilkan selama 2 detik
lcd.clear(); // Hapus layar
}
void loop() {
// Mengirimkan sinyal ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Menerima sinyal pantulan
duration = pulseIn(echoPin, HIGH);
// Menghitung jarak kendaraan dalam cm
distance = duration * 0.034 / 2;
// Jika kendaraan terdeteksi dalam jarak kurang dari 20 cm
if (distance < 100 && distance > 0) {
myServo.write(90); // Buka palang gerbang (servo bergerak 90 derajat)
delay(3000); // Tunggu 3 detik (biarkan gerbang terbuka)
myServo.write(0); // Tutup palang gerbang (servo kembali ke posisi 0)
// Tambahkan jumlah kendaraan
vehicleCount++;
// Update tampilan LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kendaraan: ");
lcd.setCursor(11, 0);
lcd.print(vehicleCount);
}
delay(1000); // Jeda 1 detik sebelum mengulangi loop
}