Skip to content

Instantly share code, notes, and snippets.

@mcattani
Created May 30, 2022 18:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcattani/92f0fb8e9959ef4fec0a3327f9e4a690 to your computer and use it in GitHub Desktop.
Save mcattani/92f0fb8e9959ef4fec0a3327f9e4a690 to your computer and use it in GitHub Desktop.
Toda la información en: https://thenerdyapprentice.blogspot.com/
/*
En este sketch utilizamos un Arduino Pro Micro, un lector RFID RC522 y un par de LEDs.
El objetivo es que al leer el UID de un TAG autorizadoo el Pro Micro ingrese la contraseña
y envíe el código de la tecla Enter/Entrar logueándonos así en el sistema.
Si el TAG es el autorizado se encenderá el LED verde, caso contrario el colorado.
El Pro Micro utilziza un microcontrolador Atmega32U4 (el mismo que el Arduino Leonardo)
que nos permite emular un teclado. No puede utilizarse la libreria Keyboard.h con un Arduino
con un microcontrolador Atmega328 como el Arduino UNO.
Los LEDs rojo y verde están concectados a los pines 3 y 4 respectivamente.
Más información y entrada completa en: https://thenerdyapprentice.blogspot.com/
*/
/* ------------------------------------
MFRC522 Arduino
Reader/PCD Pro Micro
Signal Pin Pin
-------------------------------------
RST/Reset RST 9
SPI SS SDA(SS) 10
SPI MOSI MOSI 16
SPI MISO MISO 14
SPI SCK SCK 15
*/
// Incluimos las librerías necesarias para el RC522 y Keyboard para emular el teclado
#include <SPI.h>
#include <MFRC522.h>
#include <Keyboard.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
// Definimos los LED
const int LEDR = 3;
const int LEDV = 4;
const String Password = "PASSWORD AQUI"; // Constante que guarda el password para utilizar como login
void setup() {
Serial.begin(9600); // Iniciamos la comunicacion serial
SPI.begin(); // Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos el MFRC522
pinMode(LEDR, OUTPUT);
pinMode(LEDV, OUTPUT);
digitalWrite(LEDR, LOW); // Iniciamos con los leds apagados
digitalWrite(LEDV, LOW);
Serial.println("Acceso:");
Keyboard.begin(); // Iniciamos el control sobre el teclado
}
byte ActualUID[4]; // Almacena el UID del TAG actual
byte Usuario[4] = {0xD9, 0x6E, 0x58, 0xA3}; // UID del usuario permitido
void loop() {
// Revisamos si hay nuevas tarjetas presentes
if ( mfrc522.PICC_IsNewCardPresent()) {
//Seleccionamos una tarjeta
if ( mfrc522.PICC_ReadCardSerial()) {
// Enviamos el UID por serie
// Serial.print(F("Card UID:"));
Serial.print("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 el UID para determinar si el usuario es el autorizado
if (compareArray(ActualUID, Usuario)) {
Serial.println("Acceso concedido...");
Keyboard.print(Password);
Keyboard.write(KEY_RETURN);
digitalWrite(LEDV, HIGH);
delay(500);
digitalWrite(LEDV, LOW);
}
else {
Serial.println("Acceso denegado...");
digitalWrite(LEDR, HIGH);
delay(500);
digitalWrite(LEDR, LOW);
}
// Terminamos la lectura de la tarjeta tarjeta actual
mfrc522.PICC_HaltA();
}
}
delay(300); // Delay para evitar rebotes
}
// 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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment