#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C dan ukuran LCD (0x27 untuk umumnya)
int ledmerah = 13;
int ledhijau = 12;
int buzzerPin = 7; // Pin untuk buzzer
#define ECHO_PIN 10
#define TRIG_PIN 11
Servo servoku;
void setup() {
servoku.attach(9);
pinMode(ledmerah, OUTPUT);
pinMode(ledhijau, OUTPUT);
pinMode(buzzerPin, OUTPUT); // Inisialisasi buzzer sebagai OUTPUT
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
lcd.init(); // Inisialisasi LCD
lcd.backlight(); // Nyalakan backlight LCD
lcd.setCursor(0, 0);
lcd.print("Jarak: ");
}
float jarak_cm() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
int durasi = pulseIn(ECHO_PIN, HIGH);
return durasi * 0.034 / 2;
}
void loop() {
float jarak = jarak_cm();
lcd.setCursor(7, 0);
lcd.print(" "); // Menghapus nilai sebelumnya
lcd.setCursor(7, 0);
lcd.print(jarak);
if (jarak > 150) {
digitalWrite(ledmerah, HIGH);
digitalWrite(ledhijau, LOW);
servoku.write(90);
lcd.setCursor(0, 2);
lcd.print("Gerbang Tertutup");
noTone(buzzerPin); // Matikan buzzer
} else {
digitalWrite(ledmerah, LOW);
digitalWrite(ledhijau, HIGH);
servoku.write(0);
lcd.setCursor(0, 2);
lcd.print("Gerbang Terbuka ");
if (jarak < 150) {
// Bunyikan buzzer dengan "tit tit" dan jeda 500 ms
tone(buzzerPin, 1000); // Frekuensi bunyi (1 kHz)
delay(500); // Jeda 500 ms
noTone(buzzerPin); // Matikan suara
delay(500); // Jeda 500 ms
} else {
// Matikan buzzer
noTone(buzzerPin);
}
}
}