#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Definisikan pin untuk HC-SR04
#define TRIG_PIN1 32
#define ECHO_PIN1 35
#define TRIG_PIN2 5
#define ECHO_PIN2 17
// Inisialisasi LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel untuk menghitung total kendaraan
int totalVehicles = 0;
const int maxVehicles = 10;
// Variabel untuk jarak minimum deteksi kendaraan (dalam cm)
const int minDistance = 10;
void setup() {
// Inisialisasi komunikasi serial
Serial.begin(115200);
// Inisialisasi sensor ultrasonik
pinMode(TRIG_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIG_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
// Tampilkan pesan selamat datang di LCD
lcd.setCursor(0, 0);
lcd.print(" Smart Queuing");
lcd.setCursor(0, 1);
lcd.print(" Rymutich");
delay(2000);
lcd.clear();
}
long readUltrasonicDistance(int trigPin, int echoPin) {
// Kirimkan sinyal trigger selama 10 mikrodetik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Hitung waktu yang dibutuhkan sinyal untuk kembali
long duration = pulseIn(echoPin, HIGH);
// Konversi waktu ke jarak (dalam cm)
long distance = duration * 0.034 / 2;
return distance;
}
void loop() {
// Baca jarak dari sensor 1
long distance1 = readUltrasonicDistance(TRIG_PIN1, ECHO_PIN1);
// Baca jarak dari sensor 2
long distance2 = readUltrasonicDistance(TRIG_PIN2, ECHO_PIN2);
// Tampilkan hasil pada Serial Monitor
Serial.print("Jarak Sensor 1: ");
Serial.print(distance1);
Serial.println(" cm");
Serial.print("Jarak Sensor 2: ");
Serial.print(distance2);
Serial.println(" cm");
// Tampilkan hasil pada LCD
lcd.setCursor(0, 0);
lcd.print("GATE IN : ");
lcd.print(distance1);
lcd.print(" cm ");
lcd.setCursor(0, 1);
lcd.print("GATE OUT: ");
lcd.print(distance2);
lcd.print(" cm ");
delay(2000); // Tunda untuk menampilkan informasi sensor
lcd.clear();
// Logika untuk menghitung kendaraan masuk/keluar
if (distance1 < minDistance && totalVehicles < maxVehicles) {
totalVehicles++;
delay(1000); // Delay untuk mencegah pembacaan ganda
}
if (distance2 < minDistance && totalVehicles > 0) {
totalVehicles--;
delay(1000); // Delay untuk mencegah pembacaan ganda
}
// Tampilkan total kendaraan dan status parkir pada LCD
lcd.setCursor(0, 0);
lcd.print(" Total : ");
lcd.print(totalVehicles);
lcd.print(" "); // Clear remaining characters
lcd.setCursor(0, 1);
if (totalVehicles < maxVehicles) {
lcd.print(" Silahkan Masuk ");
} else {
lcd.print(" Parkir Penuh ");
}
// Tunggu sebelum pembacaan berikutnya
delay(1000);
}