#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define ECHO_PIN 11
#define TRIG_PIN 12
#define buzzer 4
// Inisialisasi LCD dengan alamat I2C 0x27 dan ukuran 16x2
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(7, OUTPUT); // Lampu Merah
pinMode(6, OUTPUT); // Lampu Kuning
pinMode(5, OUTPUT); // Lampu Hijau
pinMode(buzzer, OUTPUT); // Buzzer
Serial.begin(9600);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
// Inisialisasi LCD
lcd.init();
lcd.backlight();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Parking Sensor");
delay(2000); // Tampilkan teks awal selama 2 detik
lcd.clear();
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int duration = pulseIn(ECHO_PIN, HIGH);
return duration * 0.034 / 2;
}
void displayMessage(const char* message, float distance) {
lcd.clear();
lcd.setCursor(0, 0); // Tampilkan pesan di baris pertama
lcd.print("Status: ");
lcd.print(message);
lcd.setCursor(0, 1); // Tampilkan jarak di baris kedua
lcd.print("Distance: ");
lcd.print(distance);
lcd.print(" cm");
}
void loop() {
float distance = readDistanceCM();
if (distance < 100) {
digitalWrite(7, HIGH); // Lampu Merah Nyala
digitalWrite(6, LOW);
digitalWrite(5, LOW);
displayMessage("STOP", distance);
for (int i = 0; i < 5; i++) {
tone(buzzer, 1000);
delay(250);
noTone(buzzer);
delay(150);
}
}
else if (distance >= 100 && distance <= 300) {
digitalWrite(7, LOW);
digitalWrite(6, HIGH); // Lampu Kuning Nyala
digitalWrite(5, LOW);
displayMessage("SLOW", distance);
tone(buzzer, 1000);
delay(500);
noTone(buzzer);
delay(300);
}
else {
digitalWrite(7, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH); // Lampu Hijau Nyala
displayMessage("GO", distance);
}
Serial.print("Jarak: ");
Serial.print(distance);
Serial.println(" cm");
delay(1000);
noTone(buzzer); // Matikan suara buzzer setelah setiap loop
}