//declarar librerías
#include <SPI.h> //libreria para el sensor nfc
#include <MFRC522.h> //librería para el sensor nfc
#include<Servo.h> //libreria para el servo
//declarar variables
#define RST 9 // pin reset
#define SS 10 // pin lectura
MFRC522 lector(SS, RST); // se crea una instancia
byte lecturaUID[4]; // se guarda los datos de las tarjetas
byte user1[4]= {0x11, 0x22, 0x33, 0x44} ; //tarjeta blanca
byte user2[4]= {0x01, 0x02, 0x03, 0x04} ; // chip
int ledv=2;
int ledr=3;
Servo s1;
void setup(){
Serial.begin(9600); // comunicación serial
SPI.begin(); // comunicación con el lector
lector.PCD_Init(); // se inicia el lector
Serial.println("Sistema Activado");
pinMode(ledr,OUTPUT);
pinMode(ledv,OUTPUT);
s1.attach(6);
}
void loop(){
if ( ! lector.PICC_IsNewCardPresent()) // si no hay una tarjeta presente
return; // retorna al loop esperando por una tarjeta
if ( ! lector.PICC_ReadCardSerial()) // si no puede obtener datos de la tarjeta
return; // retorna al loop esperando por otra tarjeta
// obtener numero unico
Serial.print("UID:");
for (byte i = 0; i < lector.uid.size; i++) { // bucle recorre de a un byte por vez el UID
if (lector.uid.uidByte[i] < 0x10){ // si el byte leido es menor a 0x10
Serial.print(" 0"); // imprime espacio en blanco y numero cero
}
else{
Serial.print(" ");
}
Serial.print(lector.uid.uidByte[i], HEX); // imprime el byte del UID leido en hexadecimal
lecturaUID[i]=lector.uid.uidByte[i]; //guarda el numero id de la tarjeta
}
Serial.print("\t");
if(comparaUID(lecturaUID, user1)){ //llama a funcion comparaUID con Usuario1T
Serial.println("ingreso usuario tarjeta");
digitalWrite(ledv, HIGH);
s1.write(90);
delay(3000);
digitalWrite(ledv, LOW);
s1.write(0);
} else
if(comparaUID(lecturaUID, user2)){ // llama a funcion comparaUID con Usuario2ll
Serial.println("ingreso Usuario llavero");
digitalWrite(ledr, HIGH);
s1.write(180);
delay(3000);
digitalWrite(ledr, LOW);
s1.write(0);
}else{
Serial.println("Usuario no autorizado");
lector.PICC_HaltA();
}
}
// funcion de comparacion
boolean comparaUID(byte lectura[],byte usuario[]) // funcion comparaUID
{
for (byte i=0; i < lector.uid.size; i++){ // bucle recorre de a un byte por vez el UID
if(lectura[i] != usuario[i]) // si byte de UID leido es distinto a usuario
return(false); // retorna falso
}
return(true); // si los 4 bytes coinciden retorna verdadero
}