//Program Parkir
//By Rifkihai
#include <Wire.h>
#include <ESP32Servo.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int servoInPin = 18; // entrance
const int servoOutPin = 17; // exit
const int trig1Pin = 33; // Entrance sensor
const int echo1Pin = 32; // Entrance sensor
const int trig2Pin = 12; // Exit sensor
const int echo2Pin = 14; // Exit sensor
Servo servoIn;
Servo servoOut;
int kendaraan = 0;
const int kapasitasMaks = 15;
long measureDistance(int trigPin, int echoPin) {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
return pulseIn(echoPin, HIGH) / 58;
}
void setup() {
lcd.init();
lcd.backlight();
lcd.clear();
servoIn.attach(servoInPin);
servoOut.attach(servoOutPin);
servoIn.write(0);
servoOut.write(0);
pinMode(trig1Pin, OUTPUT);
pinMode(echo1Pin, INPUT);
pinMode(trig2Pin, OUTPUT);
pinMode(echo2Pin, INPUT);
}
void loop() {
long distanceIn = measureDistance(trig1Pin, echo1Pin);
long distanceOut = measureDistance(trig2Pin, echo2Pin);
if (distanceIn < 30 && kendaraan < kapasitasMaks) {
servoIn.write(90);
kendaraan++;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KENDARAAN = ");
lcd.print(kendaraan);
lcd.setCursor(0, 1);
lcd.print("SISA PARKIR = ");
lcd.print(kapasitasMaks - kendaraan);
delay(3000);
servoIn.write(0);
}
if (distanceOut < 30 && kendaraan > 0) {
servoOut.write(90);
kendaraan--;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("KENDARAAN = ");
lcd.print(kendaraan);
lcd.setCursor(0, 1);
lcd.print("SISA PARKIR = ");
lcd.print(kapasitasMaks - kendaraan);
delay(3000);
servoOut.write(0);
}
}