#include <Servo.h>
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
String allowedUIDs[] = {
"9060D020",
"E3F7B81D",
};
Servo servo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 rfid(SS_PIN, RST_PIN);
bool doorLocked = true;
unsigned long lastResponseTime = 0;
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
servo.attach(3);
SPI.begin();
rfid.PCD_Init();
unlockDoor();
}
void loop() {
lcd.setCursor(1, 0);
lcd.print("Scan Kartu");
if (!rfid.PICC_IsNewCardPresent())
return;
if (!rfid.PICC_ReadCardSerial())
return;
lastResponseTime = millis(); // Memperbarui waktu respons terakhir
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Scanning");
Serial.print("UID yang dipindai: ");
String scannedUID = "";
for (byte i = 0; i < rfid.uid.size; i++) {
lcd.print(".");
String hex = String(rfid.uid.uidByte[i], HEX);
if (hex.length() == 1) {
hex = "0" + hex;
}
scannedUID += hex;
delay(300);
}
scannedUID.toUpperCase();
scannedUID.replace(" ", "");
bool uidAllowed = false;
for (int i = 0; i < sizeof(allowedUIDs) / sizeof(allowedUIDs[0]); i++) {
if (scannedUID == allowedUIDs[i]) {
uidAllowed = true;
break;
}
}
if (uidAllowed) {
if (doorLocked) {
unlockDoor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu terbuka");
delay(10000); // Tunggu selama 5 detik
lcd.clear();
lockDoor(); // Setelah 5 detik, kunci pintu kembali
lcd.setCursor(0, 0);
lcd.print("Pintu tertutup");
delay(1500);
lcd.clear();
} else {
lockDoor();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Pintu terkunci");
delay(1500);
lcd.clear();
}
} else {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Kartu tidak valid!");
delay(1500);
lcd.clear();
}
}
void unlockDoor() {
servo.write(60);
doorLocked = false;
}
void lockDoor() {
servo.write(160);
doorLocked = true;
}
#include <LiquidCrystal_I2C.h>
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_PIN 10
byte readCard[4];
byte a = 0;
LiquidCrystal_I2C lcd(0x27, 16, 2);
MFRC522 mfrc522(SS_PIN, RST_PIN);
void setup() {
Serial.begin(9600);
lcd.init();
lcd.backlight();
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
delay(4);
mfrc522.PCD_DumpVersionToSerial();
lcd.setCursor(2, 0);
lcd.print("scan kartu");
}
void loop() {
if ( ! mfrc522.PICC_IsNewCardPresent()) {
return 0;
}
if ( ! mfrc522.PICC_ReadCardSerial()) {
return 0;
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("UID Kartu");
a = 0;
Serial.println(F("Scanned PICC's UID:"));
for ( uint8_t i = 0; i < 4; i++) { //
readCard[i] = mfrc522.uid.uidByte[i];
Serial.print(readCard[i], HEX);
Serial.print(" ");
lcd.setCursor(a, 1);
lcd.print(readCard[i], HEX);
lcd.print(" ");
delay(500);
a += 3;
}
Serial.println("");
mfrc522.PICC_HaltA();
return 1;
}