#include <Wire.h> // Library untuk komunikasi I2C
#include <LiquidCrystal_I2C.h> // Library untuk mengontrol LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // Membuat objek LCD dengan alamat 0x27, ukuran 16 kolom dan 2 baris
const int buttonPin = 2; // Tombol terhubung ke pin digital 2
int count = 0; // Variabel untuk menyimpan jumlah hitungan
int buttonState = 0; // Menyimpan kondisi tombol saat ini (ditekan / tidak)
int lastButtonState = 0; // Menyimpan kondisi tombol sebelumnya
void setup() {
pinMode(buttonPin, INPUT_PULLUP); // Menjadikan pin tombol sebagai input dengan resistor pull-up internal
lcd.init(); // Menginisialisasi LCD agar siap digunakan
lcd.backlight(); // Menyalakan lampu latar LCD
lcd.setCursor(0, 0); // Mengatur posisi kursor di kolom 0, baris 0
lcd.print("Smart Counter"); // Menampilkan teks "Smart Counter" di LCD
delay(1000); // Menunggu 1 detik agar teks bisa dibaca
lcd.clear(); // Menghapus tulisan di layar LCD
}
void loop() {
buttonState = digitalRead(buttonPin); // Membaca kondisi tombol (HIGH atau LOW)
// Mengecek apakah tombol baru saja ditekan
if (lastButtonState == HIGH && buttonState == LOW) {
count++; // Menambah nilai hitungan setiap kali tombol ditekan
lcd.clear(); // Menghapus tampilan sebelumnya
lcd.setCursor(0, 0); // Mengatur kursor di baris pertama
lcd.print("Jumlah: "); // Menampilkan teks "Jumlah:"
lcd.print(count); // Menampilkan nilai hitungan (count)
// Jika jumlah sudah mencapai 10 atau lebih
if (count >= 10) {
lcd.setCursor(0, 1); // Pindah ke baris kedua LCD
lcd.print("Ruangan Penuh!"); // Menampilkan pesan bahwa ruangan penuh
}
delay(200); // Menunggu sebentar untuk menghindari pembacaan ganda (debouncing)
}
lastButtonState = buttonState; // Menyimpan kondisi tombol saat ini untuk dicek lagi nanti
}