#include <ESP32Servo.h>
const int PIN_TRIGGER = 21; // Pin trigger sensor ultrasonik
const int PIN_ECHO = 22; // Pin echo sensor ultrasonik
const int SERVO_PIN = 4; // Pin servo
const int kap_max = 10; // Kapasitas maksimum tempat parkir
int kendaraan = 0; // Jumlah kendaraan yang sedang diparkir
Servo servo; // Objek untuk mengendalikan servo
bool parkirfull = false; // Menyimpan status tempat parkir penuh
const int btn_pin = 25; // Pin untuk tombol reset jumlah kendaraan
bool resetbtn = false; // Status tombol reset
void setup() {
Serial.begin(9600);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(btn_pin, INPUT_PULLUP); // Input pull-up untuk tombol reset
servo.setPeriodHertz(50); // Set periode PWM ke 50Hz (untuk servo standar)
servo.attach(SERVO_PIN); // Menghubungkan objek servoMotor dengan pin servo
}
void loop() {
int jarak = penentuJarak(); // Mengukur jarak kendaraan dengan sensor ultrasonik
// Baca status tombol reset
resetbtn = digitalRead(btn_pin);
// Jika tombol reset ditekan, reset jumlah kendaraan
if (resetbtn == HIGH) {
kendaraan = 0;
parkirfull = false;
Serial.println("Jumlah kendaraan telah direset.");
delay(1000); // Delay untuk debouncing
}
// Jika jarak lebih kecil dari 30cm, kendaraan mendekati
if (jarak < 30) {
if (!parkirfull) {
if (kendaraan < kap_max) {
servo.write(90); // Membuka pintu parkir
delay(2000); // Delay untuk memastikan kendaraan masuk
kendaraan++; // Menambah jumlah kendaraan yang diparkir
Serial.println("Kendaraan masuk. Jumlah parkir saat ini: " + String(kendaraan));
if (kendaraan >= kap_max) {
parkirfull = true; // Menandakan tempat parkir penuh
Serial.println("Tempat parkir penuh!");
}
} else {
Serial.println("Maaf, tempat parkir penuh.");
}
}
} else { // Jika jarak lebih besar dari 30cm, kendaraan menjauh
if (parkirfull) {
parkirfull = false; // Reset status tempat parkir penuh
servo.write(0); // Menutup pintu parkir
delay(2000); // Delay untuk memastikan kendaraan keluar
kendaraan--; // Mengurangi jumlah kendaraan yang diparkir
Serial.println("Kendaraan keluar. Jumlah parkir saat ini: " + String(kendaraan));
}
}
delay(100); // Delay untuk stabilitas pembacaan
}
int penentuJarak() {
digitalWrite(PIN_TRIGGER, LOW);
delayMicroseconds(2);
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIGGER, LOW);
long duration = pulseIn(PIN_ECHO, HIGH);
int jarak = duration / 58; // Menghitung jarak dalam cm
return jarak;
}