#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//inisialisasi berbagai pin yang masuk ke arduino
int triggerPin = 4;
int echoPin = 3;
int LED1 = 8;
int LED2 = 9;
int LED3 = 10;
int LED4 = 11;
int LED5 = 12;
int LED6 = 13;
//inisialisasi pin buzzer dengan frekuensi yang dikeluarkan
int pinBuzzer=2;
int frekuensi=1600;
//mendeklarasikan sensor ultrasonik dengan durasi
long durasi;
void setup() {
//program yang akan berjalan satu kali disertai dengan deklarasi inisialisasi
//*dengan tujuan menentukan sebuah komponen sebagai nput atau output.
pinMode(triggerPin, OUTPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(LED4, OUTPUT);
pinMode(LED5, OUTPUT);
pinMode(LED6, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(pinBuzzer, OUTPUT);
//penggunaaan backlight dan init berfungsi untuk membantu menampilkan teks pada layar lcd I2C
lcd.backlight();
lcd.init();
lcd.setCursor(0,0);
lcd.print("LOADING.... ");
delay(1000);
}
void loop() {
//program yang akan berjalan secara berulang-ulang.
//menggunakan delay dikarenakan supaya teks pada lcd tidak kedap kedip.
//*namun memiliki kekurangan yaitu akan terjadi delay pada lcd jika mengganti frekuensi pada sensor.
digitalWrite(triggerPin, LOW);
delay(400);
digitalWrite(triggerPin, HIGH);
delay(400);
digitalWrite(triggerPin, LOW);
durasi = pulseIn(echoPin, HIGH);
//menggunakan int untuk memisahkan cm dengan m , supaya program dapat membaca dengan secara terstruktur.
int cm = durasi*0.034/2;
float m = durasi*0.034/2/100;
//if dibawah ini digunakan sesuai dengan instruksi pak Okta
if(cm < 100){
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
digitalWrite(LED3, LOW);
//LED INI SEBAGAI KOMPONEN TAMBAHAN
digitalWrite(LED4, HIGH);
delay(500);
digitalWrite(LED4, LOW);
delay(500);
digitalWrite(LED5, HIGH);
delay(500);
digitalWrite(LED5, LOW);
//perintah untuk komponen buzzer mengeluarkan suara
tone(pinBuzzer,frekuensi);
delay(50);
//JARAK , M DAN "M" mereka ditampilkan dibawah instruksi setcursor 0,0
lcd.setCursor(0, 0);
lcd.print("JARAK: ");
lcd.print(cm);
lcd.print(" CM ");
//menggunakan 5,6 supaya tidak terjadi crash dengan lcd setcursor 0,1
lcd.setCursor(5, 6);
lcd.print("BERBAHAYA");
lcd.setCursor(0, 1);
lcd.print("KET: ");
}else
if(m > 1 && m < 2){
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
digitalWrite(LED3, LOW);
digitalWrite(LED5, HIGH);
delay(500);
digitalWrite(LED5, LOW);
delay(500);
digitalWrite(LED6, HIGH);
delay(500);
digitalWrite(LED6, LOW);
//JARAK , M DAN "M" mereka ditampilkan dibawah instruksi setcursor 0,0
lcd.setCursor(0, 0);
lcd.print("JARAK: ");
lcd.print(m);
lcd.print(" M ");
//menggunakan 5,6 supaya tidak terjadi crash dengan lcd setcursor 0,1
lcd.setCursor(5, 6);
lcd.print("WASPADA ");
lcd.setCursor(0, 1);
lcd.print("KET: ");
}else
if(cm > 200){
digitalWrite(LED1, LOW);
digitalWrite(LED2, LOW);
digitalWrite(LED3, HIGH);
digitalWrite(LED4, HIGH);
delay(500);
digitalWrite(LED4, LOW);
delay(500);
digitalWrite(LED6, HIGH);
delay(500);
digitalWrite(LED6, LOW);
//JARAK , M DAN "M" mereka ditampilkan dibawah instruksi setcursor 0,0
lcd.setCursor(0, 0);
lcd.print("JARAK: ");
lcd.print(cm);
lcd.print(" CM ");
//menggunakan 5,6 supaya tidak terjadi crash dengan lcd setcursor 0,1
lcd.setCursor(5, 6);
lcd.print("AMAN ");
lcd.setCursor(0, 1);
lcd.print("KET: ");
}
}