#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C LCD: 0x27, 16 kolom, 2 baris
const int sensorPin = A0; // Pin sensor ke Arduino (analog pin A0)
const int resetButtonPin = 8; // Pin push button reset ke Arduino
const int buzzerPin = 9; // Pin buzzer ke Arduino
const int ledPin = 7; // Pin LED ke Arduino
int count = 0; // Variabel untuk menyimpan jumlah total barang
int detectionCount = 0; // Variabel untuk menyimpan jumlah objek yang terdeteksi
int sensorState = 0; // Variabel untuk menyimpan status sensor
int lastSensorState = 0; // Variabel untuk menyimpan status sensor sebelumnya
int resetButtonState = 0; // Variabel untuk menyimpan status push button reset
int lastResetButtonState = HIGH; // Variabel untuk menyimpan status push button reset sebelumnya
unsigned long lastDebounceTime = 0; // Waktu terakhir debounce
unsigned long debounceDelay = 10; // Waktu debounce
void setup() {
lcd.begin(16, 2); // Inisialisasi LCD (16 kolom, 2 baris)
lcd.init(); // Inisialisasi I2C LCD
lcd.backlight(); // Aktifkan backlight (jika ada)
lcd.print(" Jumlah Barang:"); // Menampilkan label awal di LCD
pinMode(sensorPin, INPUT); // Set pin sensor sebagai input
pinMode(resetButtonPin, INPUT); // Set pin push button reset sebagai input
pinMode(buzzerPin, OUTPUT); // Set pin buzzer sebagai output
pinMode(ledPin, OUTPUT); // Set pin LED sebagai output
}
void loop() {
// Baca status sensor
sensorState = digitalRead(sensorPin);
// Lakukan debounce pada push button reset
int reading = digitalRead(resetButtonPin);
if (reading != lastResetButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
if (reading != resetButtonState) {
resetButtonState = reading;
// Reset hitungan, bunyikan buzzer, dan matikan LED jika push button reset ditekan
if (resetButtonState == LOW) {
count = 0;
detectionCount = 0;
lcd.clear();
lcd.print(" Jumlah Barang:");
// Bunyikan buzzer
tone(buzzerPin, 500, 200);
// Matikan LED
digitalWrite(ledPin, LOW);
}
}
}
// Periksa jika ada objek yang lewat
if (sensorState == HIGH && lastSensorState == LOW) {
detectionCount++;
count++;
lcd.setCursor(0, 1);
lcd.print(" "); // Membersihkan area tampilan jumlah barang sebelumnya
lcd.setCursor(0, 1);
lcd.print(detectionCount);
// Bunyikan buzzer saat objek lewat
tone(buzzerPin, 1000, 100);
// Jika jumlah objek yang terdeteksi sudah mencapai 10
if (detectionCount >= 3) {
// Bunyikan buzzer dengan delay 0.1 detik selama 5 detik
for (int i = 0; i < 50; i++) {
tone(buzzerPin, 1500, 100);
digitalWrite(ledPin, HIGH); // Nyalakan LED
delay(100);
digitalWrite(ledPin, LOW); // Matikan LED
delay(100);
}
}
}
// Simpan status sensor sebelumnya
lastSensorState = sensorState;
lastResetButtonState = reading;
}