#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 rfid(SS_PIN, RST_PIN);
Servo servo;
const int LED_VERDE = 5;
const int LED_ROJO = 6;
const int TOTAL_TARJETAS = 4;
String tarjetasAutorizadas[TOTAL_TARJETAS] = {
"11 22 33 44",
"7C 22 9D 41",
"B1 88 3E F0",
"D4 09 6A C7"
};
String nombreUsuario[TOTAL_TARJETAS] = {
"Admin",
"Mama",
"Papa",
"Invitado"
};
int buscarTarjeta(String uid) {
for (int i = 0; i < TOTAL_TARJETAS; i++) {
if (uid == tarjetasAutorizadas[i]) {
return i;
}
}
return -1;
}
String leerUID() {
String uid = "";
for (byte i = 0; i < rfid.uid.size; i++) {
if (rfid.uid.uidByte[i] < 0x10) uid += "0";
uid += String(rfid.uid.uidByte[i], HEX);
if (i < rfid.uid.size - 1) uid += " ";
}
uid.toUpperCase();
return uid;
}
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.PCD_Init();
servo.attach(2);
servo.write(0);
pinMode(LED_VERDE, OUTPUT);
pinMode(LED_ROJO, OUTPUT);
Serial.println("Acerque tarjeta");
}
void loop() {
if (!rfid.PICC_IsNewCardPresent()) return;
if (!rfid.PICC_ReadCardSerial()) return;
String uidLeido = leerUID();
Serial.println(uidLeido);
int indice = buscarTarjeta(uidLeido);
if (indice >= 0) {
Serial.print("Hola, ");
Serial.println(nombreUsuario[indice]);
digitalWrite(LED_VERDE, HIGH);
servo.write(90);
delay(4000);
servo.write(0);
digitalWrite(LED_VERDE, LOW);
} else {
Serial.println("Tarjeta invalida");
digitalWrite(LED_ROJO, HIGH);
delay(2000);
digitalWrite(LED_ROJO, LOW);
}
Serial.println("Acerque tarjeta");
rfid.PICC_HaltA();
}