#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR,LCD_COLUMNS,LCD_LINES);
#define echoPin 5
#define trigPin 4
#define merahPin 6
#define kuningPin 7
#define hijauPin 8
#define buzzPin 9
void setup() {
lcd.init();
lcd.backlight();
Serial.begin(9600); // bitrate for writeline in serial mode
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(merahPin, OUTPUT);
pinMode(kuningPin, OUTPUT);
pinMode(hijauPin, OUTPUT);
pinMode(buzzPin, OUTPUT);
// this part will show and write all the output processed by arduino
lcd.setCursor(6,0);
lcd.print("Welcome");
lcd.setCursor(2,1);
lcd.print("Flood Sensor");
lcd.setCursor(7, 2);
lcd.print("Enjoy!");
delay(4000);
lcd.clear();
}
//here we need to write a new function
float readDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
unsigned long duration = pulseIn(echoPin, HIGH);
return duration * 0.034 / 2;
}
//di sini hanya fugsi beep saja berdasarkan durasi
void beep(int duration) {
tone(buzzPin, 1000);
delay(duration);
noTone(buzzPin);
delay(duration);
}
void loop() {
float distance = readDistance();
delay(1000);
digitalWrite(merahPin, LOW);
digitalWrite(kuningPin, LOW);
digitalWrite(hijauPin, LOW);
if (distance < 80) {
beep(2);
digitalWrite(merahPin, HIGH);
} else if (distance <= 200) {
beep(150);
digitalWrite(kuningPin, HIGH);
} else {
beep(1000);
digitalWrite(hijauPin, HIGH);
}
lcd.setCursor(0, 0);
lcd.print("DISTANCE: ");
lcd.setCursor(10, 0);
lcd.print(distance);
Serial.print("jarak: ");
Serial.println(distance);
}