#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27
#define LCD_COLUMNS 20
#define LCD_LINES 4
LiquidCrystal_I2C lcd(I2C_ADDR,LCD_COLUMNS,LCD_LINES);
#define ECHO_PIN 3
#define TRIG_PIN 2
#define LAMPUMERAH 6
#define LAMPUIJO 7
#define pinBuzzer 5
Servo myservo;
const int potpin = A0;
void setup() {
lcd.init();
lcd.backlight();
pinMode(LAMPUMERAH, OUTPUT);
pinMode(LAMPUIJO, OUTPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
Serial.begin(115200);
pinMode(pinBuzzer, OUTPUT);
myservo.attach(9);
// this part will show and write all the output processed by arduino
lcd.setCursor(6,0);
lcd.print("Welcome");
lcd.setCursor(2,1);
lcd.print("Automatic gate");
lcd.setCursor(7, 2);
lcd.print("Enjoy!");
delay(4000);
lcd.clear();
}
float readDistanceCM() {
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
return pulseIn(ECHO_PIN, HIGH) * 0.034 / 2.0;
}
void loop() {
float distance = readDistanceCM();
Serial.print("Measured distance: ");
Serial.println(distance);
if (distance <= 200.0) {
myservo.write(90);
delay(15);
tone(pinBuzzer, 1000);
delay(200);
tone(pinBuzzer, 500);
delay(200);
digitalWrite(LAMPUMERAH, HIGH);
lcd.setCursor(0, 2);
lcd.print("AWAS BAHAYA");
} else {
myservo.write(0);
noTone(pinBuzzer);
digitalWrite(LAMPUIJO, HIGH);
lcd.setCursor(0, 2);
lcd.print("AMAN BRO");
}
lcd.setCursor(0, 0);
lcd.print("DISTANCE: ");
lcd.setCursor(10, 0);
lcd.print(distance);
Serial.print("jarak: ");
Serial.println(distance);
}