#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#define pinBuzzer 2
#define pinServo 3
#define pinEcho 4
#define pinTrigger 5
#define pinManual A0
#define LED_1 12
#define LED_2 13
LiquidCrystal_I2C lcd(0x27, 20, 4);
Servo myservo;
int valPalang;
void setup() {
pinMode(pinBuzzer, OUTPUT);
pinMode(pinServo, OUTPUT);
pinMode(pinEcho, INPUT);
pinMode(pinTrigger, OUTPUT);
pinMode(LED_1, OUTPUT);
pinMode(LED_2, OUTPUT);
myservo.attach(3);
lcd.init();
lcd.backlight();
myservo.write(0);
}
float readDistanceCM() {
digitalWrite(pinTrigger, LOW);
delayMicroseconds(2);
digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
int duration = pulseIn(pinEcho, HIGH);
return duration * 0.034 / 2;
}
void loop() {
float distance = readDistanceCM();
lcd.setCursor(0,0);
lcd.print("Jarak KA:");
lcd.setCursor(11,0);
lcd.print(distance);
delay(100);
if (distance < 100){
lcd.setCursor(2,1);
lcd.print("KA Melintas");
tone(pinBuzzer,1000);
flipflop();
valPalang = analogRead(pinManual);
valPalang = map(valPalang , 0,1023, 0, 180 );
myservo.write(valPalang);
delay(15);
}else{
myservo.write(0);
noTone(pinBuzzer);
lcd.setCursor(6,1);
lcd.print("Aman");
}
}
void flipflop(){
digitalWrite(LED_1, HIGH);
delay(1000);
digitalWrite(LED_1, LOW);
digitalWrite(LED_2 , HIGH);
delay(1000);
digitalWrite(LED_2, LOW);
}