#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#define power 35
#define Echo 19
#define Trig 23
#define Merah 14
#define Kuning 12
#define Hijau 13
#define buzzer 26
float jarak = 0;
void ukur_jarak(){
digitalWrite(Trig, LOW);
delay(10);
digitalWrite(Trig, HIGH);
delay(10);
digitalWrite(Trig, LOW);
int duration = pulseIn(Echo, HIGH);
jarak = duration * 0.0343 / 2;
Serial.print("Jarak: ");
Serial.print(jarak);
Serial.println(" cm");
}
void output_jarak(){
if(jarak > 300) {
digitalWrite(Hijau, HIGH);
digitalWrite(Kuning, LOW);
digitalWrite(Merah, LOW);
Serial.println("Lampu Hijau Menyala");
tone(buzzer, 200);
delay(100);
tone(buzzer, 0);
delay(1000);
}
else if(jarak >= 120 && jarak <= 300) {
digitalWrite(Hijau, LOW);
digitalWrite(Kuning, HIGH);
digitalWrite(Merah, LOW);
Serial.println("Lampu Kuning Menyala");
tone(buzzer, 350);
delay(100);
tone(buzzer, 0);
delay(500);
}
else if(jarak < 120) {
digitalWrite(Hijau, LOW);
digitalWrite(Kuning, LOW);
digitalWrite(Merah, HIGH);
Serial.println("Lampu Merah Menyala");
tone(buzzer, 500);
delay(100);
tone(buzzer, 0);
delay(100);
}
}
void pesan(){
if (jarak < 30) {
digitalWrite(buzzer, HIGH);
} else {
digitalWrite(buzzer, LOW);
}
}
void tampil(){
lcd.backlight();
lcd.setCursor(1,0);
lcd.print("PARKING SYSTEM");
lcd.setCursor(0,1);
lcd.print("JARAK: ");
lcd.print(jarak);
lcd.print(" CM ");
}
void setup() {
Serial.begin(115200);
pinMode(power, INPUT);
pinMode(Trig, OUTPUT);
pinMode(Echo, INPUT);
pinMode(Merah, OUTPUT);
pinMode(Kuning, OUTPUT);
pinMode(Hijau, OUTPUT);
pinMode(buzzer, OUTPUT);
lcd.init();
}
void loop() {
digitalWrite(Merah, LOW);
digitalWrite(Kuning, LOW);
digitalWrite(Hijau, LOW);
int powerSt = digitalRead(power);
if (powerSt == HIGH){
ukur_jarak();
output_jarak();
pesan();
tampil();
}
}