#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#define btn 3
#define trig 4
#define echo 5
#define red 10
#define yellow 9
#define green 8
Servo mys;
LiquidCrystal_I2C lcd(0x27, 16, 2);
bool sensorstate = false;
bool btnstate = false;
int keadaanparkir = 0;
bool mobilAda = false;
void setup() {
// put your setup code here, to run once:
lcd.init();
lcd.backlight();
pinMode(btn, INPUT);
pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
mys.attach(2);
mys.write(90);
lcd.clear();
Serial.begin(9600);
}
float sensorportal(){
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
int durasi = pulseIn(echo, HIGH);
return durasi / 58.745;
}
void loop() {
// put your main code here, to run repeatedly:
int jarak = sensorportal();
int button = digitalRead(btn);
if (jarak >= 200) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Selamat Datang");
lcd.setCursor(0, 1);
lcd.print("Parking : ");
lcd.print(keadaanparkir);
mys.write(90);
digitalWrite(red, HIGH);
digitalWrite(yellow, LOW);
sensorstate = false;
}
if (jarak <= 200 && !sensorstate) {
digitalWrite(yellow, HIGH);
digitalWrite(red, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("SilakanAmbil");
lcd.setCursor(0, 1);
lcd.print("tiket : #");
lcd.print(keadaanparkir + 1);
sensorstate = true;
mobilAda = true;
}
if (button == LOW && !mobilAda && sensorstate) {
Serial.println("Tombol ditekan, mobil tidak ada, sensor aktif");
sensorstate = false;
digitalWrite(yellow, LOW);
digitalWrite(red , LOW);
digitalWrite(green, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Terimakasih");
Serial.println("Membuka servo...");
mys.write(0); // Buka servo
delay(3000); // Tunggu beberapa detik
Serial.println("Menutup servo...");
mys.write(90); // Tutup servo
mobilAda = false;
keadaanparkir++;
}
delay(2000);
}