Created
May 30, 2022 18:36
-
-
Save mcattani/92f0fb8e9959ef4fec0a3327f9e4a690 to your computer and use it in GitHub Desktop.
Toda la información en: https://thenerdyapprentice.blogspot.com/
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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