#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Alamat I2C untuk LCD 1602 bisa berbeda
const int trigPin = 9; // Pin trigger sensor ultrasonik
const int echoPin = 10; // Pin echo sensor ultrasonik
const int buzzerPin = 8; // Pin buzzer
const int ledPin = 7; // Pin LED
int itemCount = 0; // Jumlah barang
const int limit = 10; // Batas barang
void setup() {
Serial.begin(9600);
lcd.begin(16,2);
lcd.print("Jumlah: ");
lcd.setCursor(0, 1);
lcd.print("Limit: 10");
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(buzzerPin, OUTPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
// Mengukur jarak menggunakan sensor ultrasonik
long duration, distance;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration / 2) / 29.1;
// Menampilkan hasil di Serial Monitor
Serial.print("Jarak: ");
Serial.println(distance);
// Jika ada objek mendekati sensor
if (distance < 10) {
itemCount++;
// Menampilkan jumlah barang di LCD
lcd.setCursor(7, 0);
lcd.print(itemCount);
// Jika jumlah barang mencapai batas
if (itemCount >= limit) {
// Menampilkan pesan limit di LCD
lcd.setCursor(0, 1);
lcd.print("Limit Terpenuhi");
// Mengaktifkan buzzer
tone(buzzerPin, 1000);
// LED berkedip
for (int i = 0; i < 5; i++) {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
// Menghentikan bunyi buzzer
noTone(buzzerPin);
// Mengatur ulang jumlah barang
itemCount = 0;
// Menampilkan pesan default di LCD
lcd.setCursor(0, 1);
lcd.print("Limit: 10");
}
// Tunda sejenak untuk menghindari deteksi ganda
delay(1000);
}
}