//=================================================
// Proyek Sensor Parkir PJBL Kelompok Abbyan
//=================================================
// Library yang diperlukan
//=================================================
#include <Wire.h>
#include <NewPing.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <DFRobotDFPlayerMini.h>
//=================================================
// Pengenalan Pin dan Jarak
//=================================================
#define TRIGGER 3
#define ECHO 4
#define MAXDISTANCE 250
//=================================================
// Inisialisasi Objek
//=================================================
DFRobotDFPlayerMini myDFPlayer;
LiquidCrystal_I2C lcd(0x27, 16, 2);
SoftwareSerial mySoftwareSerial(10, 11);
NewPing sonar(TRIGGER, ECHO, MAXDISTANCE);
//=================================================
// Definisi Pin
//=================================================
const int Red = 5;
const int Yellow = 6;
const int Green = 7;
const int Buzzer = 8;
//=================================================
// Variabel Jarak
//=================================================
int jarak = 0;
int distance;
//=================================================
// Variabel dan Konstanta Pengaturan Buzzer
//=================================================
int BuzzerState = LOW;
const long interval = 200;
const long interval2 = 400;
const long interval3 = 800;
const long interval4 = 2000;
unsigned long previousMillis = 0;
//=================================================
// Setup
//=================================================
void setup() {
mySoftwareSerial.begin(9600);
if (!myDFPlayer.begin(mySoftwareSerial)) {
}
lcd.begin(16, 2);
pinMode(Red, OUTPUT);
pinMode(Yellow, OUTPUT);
pinMode(Green, OUTPUT);
pinMode(Buzzer, OUTPUT);
Serial.begin(9600);
}
//=================================================
// Loop Utama
//=================================================
void loop() {
distance = sonar.ping_cm();
jarak = distance;
if (jarak <= 0) {
jarak = 0;
LCDkosong();
buzzerAman();
stopWarning();
} else if (jarak >= 1 && jarak <= 5) {
LCDnabrak();
VbuzzerNabrak();
stopWarningNabrak();
} else if (jarak >= 6 && jarak <= 12) {
LCDawas();
buzzerTipis();
VbuzzerAwas();
stopWarningAwas();
} else if (jarak >= 13 && jarak <= 22) {
LCDpelan();
buzzerDekat();
VbuzzerPelan();
stopWarningPelan();
} else if (jarak >= 23 && jarak <= 50) {
LCDaman();
buzzerJauh();
VbuzzerAman();
stopWarningAman();
}
delay(50);
updateLCDStatus();
}
//=================================================
// Fungsi Pembaruan Status LCD
//=================================================
void updateLCDStatus() {
lcd.setCursor(0, 0);
lcd.print("Jarak : ");
lcd.print(sonar.ping_cm());
lcd.print(" cm ");
lcd.setCursor(0, 1);
lcd.print("Status : ");
}
//=================================================
// Fungsi Status LCD Kosong
//=================================================
void LCDkosong() {
lcd.setCursor(9, 1);
lcd.print("KOSONG! ");
}
//=================================================
// Fungsi Status LCD Nabrak
//=================================================
void LCDnabrak() {
lcd.setCursor(9, 1);
lcd.print("NABRAK! ");
}
//=================================================
// Fungsi Status LCD Awas
//=================================================
void LCDawas() {
lcd.setCursor(9, 1);
lcd.print("AWAS! ");
}
//=================================================
// Fungsi Status LCD Pelan
//=================================================
void LCDpelan() {
lcd.setCursor(9, 1);
lcd.print("PELAN! ");
}
//=================================================
// Fungsi Status LCD Aman
//=================================================
void LCDaman() {
lcd.setCursor(9, 1);
lcd.print("AMAN! ");
}
//=================================================
// Fungsi Peringatan Kosong
//=================================================
void stopWarning() {
digitalWrite(Buzzer, LOW);
digitalWrite(Red, LOW);
digitalWrite(Yellow, LOW);
digitalWrite(Green, LOW);
}
//=================================================
// Fungsi Peringatan Nabrak
//=================================================
void stopWarningNabrak() {
digitalWrite(Buzzer, HIGH);
digitalWrite(Red, HIGH);
digitalWrite(Yellow, HIGH);
digitalWrite(Green, HIGH);
}
//=================================================
// Fungsi Peringatan Awas
//=================================================
void stopWarningAwas() {
digitalWrite(Red, HIGH);
digitalWrite(Yellow, LOW);
digitalWrite(Green, LOW);
}
//=================================================
// Fungsi Peringatan Pelan
//=================================================
void stopWarningPelan() {
digitalWrite(Red, LOW);
digitalWrite(Yellow, HIGH);
digitalWrite(Green, LOW);
}
//=================================================
// Fungsi Peringatan Aman
//=================================================
void stopWarningAman() {
digitalWrite(Red, LOW);
digitalWrite(Yellow, LOW);
digitalWrite(Green, HIGH);
}
//=================================================
// Fungsi Peringatan Suara Nabrak
//=================================================
void VbuzzerNabrak() {
myDFPlayer.volume(30);
myDFPlayer.play(1);
delay(1000);
}
//=================================================
// Fungsi Peringatan Suara Awas
//=================================================
void VbuzzerAwas() {
myDFPlayer.volume(30);
myDFPlayer.play(2);
delay(1000);
}
//=================================================
// Fungsi Peringatan Suara Pelan
//=================================================
void VbuzzerPelan() {
myDFPlayer.volume(30);
myDFPlayer.play(3);
delay(1000);
}
//=================================================
// Fungsi Peringatan Suara Aman
//=================================================
void VbuzzerAman() {
myDFPlayer.volume(30);
myDFPlayer.play(4);
delay(1000);
}
//=================================================
// Fungsi Buzzer Tipis
//=================================================
void buzzerTipis() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
if (BuzzerState == LOW) {
BuzzerState = HIGH;
} else {
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}
//=================================================
// Fungsi Buzzer Dekat
//=================================================
void buzzerDekat() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval2){
previousMillis = currentMillis;
if (BuzzerState == LOW) {
BuzzerState = HIGH;
} else {
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}
//=================================================
// Fungsi Buzzer Jauh
//=================================================
void buzzerJauh() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval3){
previousMillis = currentMillis;
if (BuzzerState == LOW) {
BuzzerState = HIGH;
} else {
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}
//=================================================
// Fungsi Buzzer Aman
//=================================================
void buzzerAman() {
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval4){
previousMillis = currentMillis;
if (BuzzerState == LOW) {
BuzzerState = HIGH;
} else {
BuzzerState = LOW;
}
digitalWrite(Buzzer, BuzzerState);
}
}
//=================================================
// Terimakasih Banyak!
//=================================================