#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
Servo servoku;
int echoPin = 2;
int trigPin = 3;
int buzzer = 4;
LiquidCrystal_I2C lcd(0x27, 16, 2);
String teks = "Selamat Datang DI STMIK JAYANUSA";
int indeks = 0;
void setup() {
Serial.begin(9600);
pinMode(echoPin, INPUT);
pinMode(trigPin, OUTPUT);
pinMode(buzzer, OUTPUT);
pinMode(13, OUTPUT);
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
servoku.attach(5);
indeks = 0; // Inisialisasi indeks ke 0
}
float bacaUltrasonik() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int durasi = pulseIn(echoPin, HIGH);
return durasi * 0.034 / 2;
}
void loop() {
float jarak = bacaUltrasonik();
if (jarak <= 200) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AWAS KERETA! ");
lcd.setCursor(0, 1);
lcd.print("Jarak: ");
lcd.print(jarak);
lcd.print("cm");
tone(buzzer, 1000);
digitalWrite(13, HIGH);
delay(500);
tone(buzzer, 10);
digitalWrite(13, LOW);
delay(500);
servoku.write(0);
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tidak ADA KERETA API! ");
lcd.setCursor(0, 1);
lcd.print(teks.substring(indeks, indeks + 16)); // Mengambil 16 karakter dari teks
indeks++;
if (indeks >= teks.length()) {
indeks = 0;
}
delay(100);
noTone(buzzer);
servoku.write(90);
}
}