#include <LiquidCrystal.h>
// Pinout
#define TRIGGER_PIN 9
#define ECHO_PIN 8
#define LCD_RS 7
#define LCD_ENABLE 6
#define LCD_D4 5
#define LCD_D5 4
#define LCD_D6 3
#define LCD_D7 2
#define BUZZER_PIN 0
#define RED 10
#define GREEN 11
#define BLUE 12
// Deklarasi objek
LiquidCrystal lcd(LCD_RS, LCD_ENABLE, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
// Fungsi untuk membaca jarak dari sensor ultrasonik
int getDistance() {
long duration;
int distance;
// Trigger sensor
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
// Tunggu respon dari sensor
duration = pulseIn(ECHO_PIN, HIGH);
// Hitung jarak
distance = duration * 0.034 / 2;
return distance;
}
void setup() {
// Inisialisasi Serial
Serial.begin(9600);
// Inisialisasi LCD
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print(" Smart Parking");
// Inisialisasi Buzzer
pinMode(BUZZER_PIN, OUTPUT);
// Inisialisasi Sensor Ultrasonik
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
pinMode(RED, OUTPUT);
}
void loop() {
int distance = getDistance();
// Tampilkan jarak di LCD
lcd.setCursor(10, 1);
lcd.print(distance);
lcd.print(" CM ");
// Atur bunyi buzzer berdasarkan jarak
if (distance < 30) {
tone(BUZZER_PIN, 1000);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
lcd.setCursor(0, 1);
lcd.print("dekattt");
}
else if (distance < 70) {
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(50);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(50);
lcd.setCursor(0, 1);
lcd.print("dekat ");
}
else if (distance < 120) {
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(100);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(100);
lcd.setCursor(0, 1);
lcd.print("dekat ");
}
else if (distance < 150) {
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(200);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(200);
lcd.setCursor(0, 1);
lcd.print("dekat ");
}
else if (distance < 200){
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(300);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(300);
lcd.setCursor(0, 1);
lcd.print("sedang ");
}
else if (distance < 250){
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(400);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(400);
lcd.setCursor(0, 1);
lcd.print("sedang ");
}
else if (distance < 290){
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(500);
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(500);
lcd.setCursor(0, 1);
lcd.print("jauh ");
}
else if (distance < 380){
tone(BUZZER_PIN, 1000);
delay(100);
noTone(BUZZER_PIN);
delay(600);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
delay(100);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(600);
lcd.setCursor(0, 1);
lcd.print("jauh ");
}
else {
analogWrite(BUZZER_PIN, 0);
digitalWrite(RED, LOW);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, LOW);
lcd.setCursor(0, 1);
lcd.print("jauh ");
}
// Tunda 100 milidetik
delay(100);
}