#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9 //Pin 9 para el reset del RC522
#define SS_PIN 10 //Pin 10 para el SS (SDA) del RC522
MFRC522 mfrc522(SS_PIN, RST_PIN); ///Creamos el objeto para el RC522
#include <Servo.h> // Incluímos la librería para poder controlar el servo
Servo servoMotor; // Declaramos la variable para controlar el servo
int pinServo = 3; // El cable de señal del servo va al pin 3
int ledr = 8; // El cable del LED va al pin 8
int buzzer = A0; // buzzer en el pin A0
void setup() {
Serial.begin(9600); //Iniciamos La comunicacion serial
SPI.begin(); //Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos el MFRC522
servoMotor.attach(pinServo); // Iniciamos el servo para que empiece a trabajar con el pin 3
Serial.println("Control de acceso:");
pinMode(ledr, OUTPUT); // Configuramos el LED como salida
pinMode(buzzer, OUTPUT); // Configuramos el Buzzer como salida
servoMotor.write(0); // Desplazamos a la posición 0º
}
byte ActualUID[4]; //almacenará el código del Tag leído
byte Usuario1[4]= {0x01, 0x02, 0x03, 0x04} ; //código del usuario 1
byte Usuario2[4]= {0xC1, 0x2F, 0xD6, 0x0E} ; //código del usuario 2
void loop() {
// Revisamos si hay nuevas tarjetas presentes
if ( mfrc522.PICC_IsNewCardPresent())
{
//Seleccionamos una tarjeta
if ( mfrc522.PICC_ReadCardSerial())
{
// Enviamos serialemente su UID
Serial.print(F("Card UID:"));
for (byte i = 0; i < mfrc522.uid.size; i++) {
Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
Serial.print(mfrc522.uid.uidByte[i], HEX);
ActualUID[i]=mfrc522.uid.uidByte[i];
}
Serial.print(" ");
//comparamos los UID para determinar si es uno de nuestros usuarios
if(compareArray(ActualUID,Usuario1) || compareArray(ActualUID, Usuario2)){
Serial.println("Acceso concedido...");
servoMotor.write(180); // Desplazamos a la posición 90º
delay(4000);
servoMotor.write(0); // Desplazamos a la posición 0º
delay(10);
}
else{
Serial.println("Acceso denegado...");
for(int i=0;i<10;i++){
digitalWrite(ledr,HIGH);
digitalWrite(buzzer, HIGH); // Hace sonar el buzzer
delay(300);
digitalWrite(ledr,LOW);
digitalWrite(buzzer, LOW); // Apaga el buzzer
delay(100);
}
}
// Terminamos la lectura de la tarjeta tarjeta actual
mfrc522.PICC_HaltA();
}
}
}
//Función para comparar dos vectores
boolean compareArray(byte array1[],byte array2[])
{
if(array1[0] != array2[0])return(false);
if(array1[1] != array2[1])return(false);
if(array1[2] != array2[2])return(false);
if(array1[3] != array2[3])return(false);
return(true);
}