#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Objek LCD
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Variabel
const int pinSensorPIR = 2;
const int pinBuzzer = 8;
int statusGerakan = 0; // status pembacaan sensor PIR
int statusSebelumnya = 0; // menyimpan status PIR sebelumnya
int jumlahOrang = 0; // counter orang lewat
void setup() {
Serial.begin(9600);
Serial.println("Sistem Counter Dimulai...");
Serial.println("Menunggu gerakan...");
lcd.begin(16, 2);
lcd.backlight();
pinMode(pinSensorPIR, INPUT);
pinMode(pinBuzzer, OUTPUT);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Counter Orang");
lcd.setCursor(0, 1);
lcd.print("Menunggu...");
}
void loop() {
statusGerakan = digitalRead(pinSensorPIR);
// DETEKSI GERAKAN BARU (LOW -> HIGH)
if (statusGerakan == HIGH && statusSebelumnya == LOW) {
jumlahOrang++; // Tambah 1 orang
// Buzzer bunyi
digitalWrite(pinBuzzer, HIGH);
delay(200);
digitalWrite(pinBuzzer, LOW);
// Tampil LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Orang lewat:");
lcd.setCursor(0, 1);
lcd.print(jumlahOrang);
// Tampil Serial
Serial.print("Gerakan terdeteksi! Jumlah: ");
Serial.println(jumlahOrang);
delay(500);
}
// Simpan status sebelumnya
statusSebelumnya = statusGerakan;
// Tampilkan status saat tidak ada gerakan
if (statusGerakan == LOW) {
lcd.setCursor(0, 0);
lcd.print("Tidak ada gerakan ");
lcd.setCursor(0, 1);
lcd.print("Total: ");
lcd.print(jumlahOrang);
}
delay(100);
}