#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define SS_PIN 10
#define RST_PIN 9
#define SERVO_PIN 5
#define LED_MERAH 6
#define LED_HIJAU 7
MFRC522 mfrc522(SS_PIN, RST_PIN);
Servo doorServo;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// GANTI UID SESUAI KARTU KAMU
byte uidBenar[] = {0x01, 0x02, 0x03, 0x04};
void setup() {
Serial.begin(9600);
SPI.begin();
mfrc522.PCD_Init();
doorServo.attach(SERVO_PIN);
doorServo.write(0);
pinMode(LED_MERAH, OUTPUT);
pinMode(LED_HIJAU, OUTPUT);
digitalWrite(LED_MERAH, HIGH);
digitalWrite(LED_HIJAU, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("SMART DOOR");
lcd.setCursor(0, 1);
lcd.print("Tempel Kartu");
}
bool cekUID(byte *uid, byte panjang) {
for (byte i = 0; i < panjang; i++) {
if (uid[i] != uidBenar[i]) {
return false;
}
}
return true;
}
void loop() {
if (!mfrc522.PICC_IsNewCardPresent()) {
return;
}
if (!mfrc522.PICC_ReadCardSerial()) {
return;
}
Serial.print("UID : ");
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i], HEX);
Serial.print(" ");
}
Serial.println();
// KARTU BENAR
if (mfrc522.uid.size == 4 &&
cekUID(mfrc522.uid.uidByte, 4)) {
digitalWrite(LED_HIJAU, HIGH);
digitalWrite(LED_MERAH, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AKSES DITERIMA");
lcd.setCursor(0, 1);
lcd.print("DOOR OPEN");
doorServo.write(90);
delay(3000);
doorServo.write(0);
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_MERAH, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("DOOR CLOSED");
delay(1500);
}
// KARTU SALAH
else {
digitalWrite(LED_HIJAU, LOW);
digitalWrite(LED_MERAH, HIGH);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("AKSES DITOLAK");
lcd.setCursor(0, 1);
lcd.print("KARTU SALAH");
delay(2000);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Tempel Kartu");
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}Loading
mfrc522
mfrc522