#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo servoku; // variabel untuk servo pertama
Servo servoku1; // variabel untuk servo kedua
int echoPin = 2; // pin untuk echo sensor ultrasonik
int trigPin = 3; // pin untuk trig sensor ultrasonik
int buzzer = 4; // pin untuk buzzer
LiquidCrystal_I2C lcd(0x27, 20, 4); // inisialisasi LCD dengan alamat 0x27 dan ukuran 20x4
void setup() {
Serial.begin(9600);
pinMode(echoPin, INPUT); // setup pin echo sebagai input
pinMode(trigPin, OUTPUT); // setup pin trig sebagai output
pinMode(buzzer, OUTPUT); // setup pin buzzer sebagai output
pinMode(13, OUTPUT); // setup pin 13 sebagai output (lampu)
lcd.begin(16, 2); // inisialisasi layar LCD dengan 16 kolom dan 2 baris
lcd.init();
lcd.backlight(); // menyalakan lampu latar LCD
servoku.attach(5); // alamat pin untuk servo pertama
servoku1.attach(6); // alamat pin untuk servo kedua
}
float bacaUltrasonik() { // fungsi untuk membaca jarak pada sensor ultrasonik
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int durasi = pulseIn(echoPin, HIGH); // mengukur durasi sinyal echo
return durasi * 0.034 / 2; // konversi durasi ke jarak
}
void loop() {
float jarak = bacaUltrasonik(); // membaca jarak dari sensor ultrasonik
noTone(buzzer); // mematikan buzze
if (jarak <= 10) { // jika ada objek dalam jarak 10 cm
lcd.setCursor(0, 0);
lcd.print("AWAS KERETA API! ");
lcd.setCursor(0, 1);
lcd.print(" MOHON BERHENTI");
tone(buzzer, 1500); // menyalakan buzzer
digitalWrite(13, HIGH); // menyalakan lampu
delay(500); // jeda
tone(buzzer, 1000); // menyalakan buzzer dengan frekuensi lain
digitalWrite(13, LOW); // mematikan lampu
delay(500); // jeda
servoku.write(360); // menggerakkan servo pertama
servoku1.write(180); // menggerakkan servo kedua
} else { // jika tidak ada objek dalam jarak 10 cm
lcd.setCursor(0, 0);
lcd.print(" PALANG TERBUKA");
lcd.setCursor(0, 1);
lcd.print(" SELAMAT-TUJUAN");
delay(10); // jeda
servoku.write(90); // menggerakkan servo pertama ke posisi awal
servoku1.write(90); // menggerakkan servo kedua ke posisi awal
}
}