// Dont Forget to Support My Channel
// Electro Pemula on Youtube and TikTok
// https://www.youtube.com/channel/UCa8eHXL2aL6lc1UN_bcge7A/
// https://www.tiktok.com/@elektropemula/
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD bisa berbeda (0x3F atau 0x27)
#define trigPin 12
#define echoPin 13
#define buzzerPin 2
int ledPins[] = {11, 10, 9, 8, 7, 6, 5, 4, 3}; // Pin untuk 9 LED
void setup() {
lcd.init();
lcd.backlight();
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
for (int i = 0; i < 9; i++) {
pinMode(ledPins[i], OUTPUT);
}
lcd.setCursor(0, 0);
lcd.print("Distance: ");
}
void loop() {
long duration, distance;
// Memicu sensor ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Membaca jarak
duration = pulseIn(echoPin, HIGH);
distance = (duration * 0.034 / 2);
// Menampilkan jarak di LCD
lcd.setCursor(10, 0);
lcd.print(" ");
lcd.setCursor(10, 0);
lcd.print(distance);
lcd.print(" cm");
// Mengatur LED dan buzzer berdasarkan jarak (maksimal 30 cm)
if (distance <= 5) {
setLEDs(9); // Semua LED menyala
buzzerBeep(100); // Buzzer berkedip cepat
} else if (distance <= 7) {
setLEDs(8); // 8 LED menyala
buzzerBeep(200); // Buzzer berkedip sedang
} else if (distance <= 9) {
setLEDs(7); // 7 LED menyala
buzzerBeep(300); // Buzzer berkedip sedang
} else if (distance <= 12) {
setLEDs(6); // 6 LED menyala
buzzerBeep(400); // Buzzer lebih lambat
}else if (distance <= 15) {
setLEDs(5); // 5 LED menyala
buzzerBeep(500); // Buzzer lebih lambat
} else if (distance <= 18) {
setLEDs(4); // 4 LED menyala
buzzerBeep(600); // Buzzer lebih lambat
} else if (distance <= 21) {
setLEDs(3); // 3 LED menyala
buzzerBeep(700); // Buzzer lebih lambat lagi
} else if (distance <= 25) {
setLEDs(2); // 2 LED menyala
buzzerBeep(800); // Buzzer sangat lambat
} else if (distance <= 30) {
setLEDs(1); // 1 LED menyala
buzzerBeep(800); // Buzzer sangat lambat
} else {
setLEDs(0); // Tidak ada LED menyala
noTone(buzzerPin); // Buzzer mati
}
delay(100);
}
// Fungsi untuk mengatur jumlah LED yang menyala
void setLEDs(int numberOfLEDs) {
for (int i = 0; i < 9; i++) {
if (i < numberOfLEDs) {
digitalWrite(ledPins[i], HIGH);
} else {
digitalWrite(ledPins[i], LOW);
}
}
}
// Fungsi untuk mengatur buzzer berkedip
void buzzerBeep(int delayTime) {
tone(buzzerPin, 1000);
delay(delayTime);
noTone(buzzerPin);
delay(delayTime);
}