unsigned int kendaraanMasuk = 0; // Menghitung kendaraan yang masuk
unsigned int kendaraanKeluar = 0; // Menghitung kendaraan yang keluar
unsigned int kendaraanParkir = 0; // Menghitung sisa kendaraan yang sedang parkir
byte pinPIRMasuk = 2; // Sensor untuk kendaraan masuk
byte pinPIROut = 13; // Sensor untuk kendaraan keluar
byte pinBuzzer = 4; // Pin untuk buzzer
volatile bool buzzerFlagMasuk = false;
volatile bool buzzerFlagKeluar = false;
void ISRMasuk() {
kendaraanMasuk++; // Jika ada kendaraan lewat sensor masuk
kendaraanParkir++; // Tambah kendaraan parkir
buzzerFlagMasuk = true; // Set flag untuk menyalakan buzzer di loop
}
void ISROut() {
if (kendaraanParkir > 0) { // Pastikan tidak mengurangi kendaraan parkir di bawah 0
kendaraanKeluar++; // Jika ada kendaraan lewat sensor keluar
kendaraanParkir--; // Kurangi kendaraan parkir
buzzerFlagKeluar = true; // Set flag untuk menyalakan buzzer di loop
}
}
void setup() {
Serial.begin(115200);
Serial.println("Penghitung Kendaraan Otomatis");
// Mengatur pin sensor dan buzzer sebagai input dan output
pinMode(pinPIRMasuk, INPUT);
pinMode(pinPIROut, INPUT);
pinMode(pinBuzzer, OUTPUT);
// Mengatur interrupt untuk sensor
attachInterrupt(digitalPinToInterrupt(pinPIRMasuk), ISRMasuk, RISING);
attachInterrupt(digitalPinToInterrupt(pinPIROut), ISROut, RISING);
}
void loop() {
// Menyalakan buzzer jika flag di-set untuk kendaraan masuk
if (buzzerFlagMasuk) {
digitalWrite(pinBuzzer, HIGH); // Nyalakan buzzer
delay(100); // Bunyi buzzer selama 100 ms
digitalWrite(pinBuzzer, LOW); // Matikan buzzer
buzzerFlagMasuk = false; // Reset flag
}
// Menyalakan buzzer jika flag di-set untuk kendaraan keluar
if (buzzerFlagKeluar) {
digitalWrite(pinBuzzer, HIGH); // Nyalakan buzzer
delay(100); // Bunyi buzzer selama 100 ms
digitalWrite(pinBuzzer, LOW); // Matikan buzzer
buzzerFlagKeluar = false; // Reset flag
}
// Menampilkan hasil deteksi kendaraan yang masuk, keluar, dan parkir di Serial Monitor
Serial.print("Masuk: ");
Serial.print(kendaraanMasuk);
Serial.print(" | Keluar: ");
Serial.print(kendaraanKeluar);
Serial.print(" | Parkir: ");
Serial.println(kendaraanParkir);
delay(100); // Delay digunakan untuk membuat jeda antar kendaraan yang akan dihitung
}