#include <LCD_I2C.h>
LCD_I2C lcd(0x27, 16, 2);
#define TRIG_PIN 5
#define ECHO_PIN 4
#define BUZZER_PIN 2
#define ENABLE_PIN 6
int freq = 1800;
int distance;
long duration;
bool en = false;
void setup() {
Serial.begin(9600);
lcd.begin();
lcd.backlight();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(ENABLE_PIN, INPUT_PULLUP);
}
void loop() {
distance = distanceCM(TRIG_PIN, ECHO_PIN);
duration = distance * 5;
lcd.setCursor(0, 0);
lcd.print("Jarak: " + String(distance) + " cm ");
if(digitalRead(ENABLE_PIN) == 0){
tone(BUZZER_PIN, 2500);
while(digitalRead(ENABLE_PIN) == 0){}
en = !en;
noTone(BUZZER_PIN);
}
if(en){
lcd.setCursor(0, 1);
lcd.print("en:ON ");
}else{
lcd.setCursor(0, 1);
lcd.print("en:OFF");
}
if (en && distance <= 100) {
alarm(duration);
lcd.setCursor(8, 1);
lcd.print("B:HIDUP");
} else {
lcd.setCursor(8, 1);
lcd.print("B:MATI ");
}
}
void alarm(int time) {
tone(BUZZER_PIN, freq);
delay(time);
noTone(BUZZER_PIN);
delay(time);
}
float distanceCM(int TRIG, int ECHO) {
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
float duration_us = pulseIn(ECHO, HIGH);
float distance_cm = 0.0343 * duration_us / 2;
return distance_cm;
}