#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MFRC522.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
int pinBuzzer = 33;
int pb = 14;
bool isCheckIn = true; // Initial check-in status
#define RST_PIN 0
#define SS_PIN 5
MFRC522 mfrc522(SS_PIN, RST_PIN);
unsigned long lastDebounceTime = 0; // For button debouncing
const unsigned long debounceDelay = 50; // Adjust debounce delay as needed
void setup() {
Serial.begin(115200);
lcd.begin(20, 4);
lcd.init();
lcd.setBacklight(255);
lcd.clear();
pinMode(pinBuzzer, OUTPUT);
pinMode(pb, INPUT_PULLUP);
// Setup RFID
mfrc522.PCD_Init();
}
void loop() {
// Button press detection with debouncing
if (digitalRead(pb) == LOW && (millis() - lastDebounceTime) > debounceDelay) {
lastDebounceTime = millis();
isCheckIn = !isCheckIn;
digitalWrite(pinBuzzer, HIGH);
delay(1000);
digitalWrite(pinBuzzer, LOW);
delay(200);
lcd.clear();
lcd.setCursor(0, 0);
if (isCheckIn) {
lcd.print("Syafril masuk");
} else {
lcd.print("Syafril pulang");
}
}
// RFID card detection and UID reading
if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {
// Handle RFID card data processing here (e.g., display UID on LCD)
// ...
delay(2000); // Optional delay after reading card
// Reset RFID reader for next card
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
}