Hola buenas estoy haciendo un control de acceso mediante un arduino nano y el RC522.
#include <MFRC522.h>
#include <MFRC522Extended.h>
#include <SPI.h>
#define SALIDA 4
#define ENTRADA_OK 3
#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
int ENTRADA_OKS = 0;
void setup() {
pinMode(SALIDA, OUTPUT);
pinMode(ENTRADA_OK, INPUT);
Serial.begin(9600); //Iniciamos La comunicacion serial
SPI.begin(); //Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos el MFRC522
Serial.println("IDENTIFICACION:");
}
byte ActualUID[4]; //almacenará el código del Tag leído
byte Usuario1[4]= {0x45, 0xD2, 0xF5, 0x16};
byte Usuario2[4]= {0xD1, 0xD2, 0x4A, 0x41};
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)or(ActualUID,Usuario2)){
Serial.println("ACCESO AUTORIZADO");
proceso();
}
else
Serial.println("ACCESO DENEGADO");
}
// Terminamos la lectura de la tarjeta tarjeta actual
mfrc522.PICC_HaltA();
}
}
void proceso(){
ENTRADA_OKS = digitalRead(ENTRADA_OK);
digitalWrite(SALIDA, HIGH);
while (digitalRead(ENTRADA_OK) == LOW) {
digitalWrite(SALIDA, LOW);
}
}
//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);
}
El problema esta a la hora de activar la salida y verificar la entrada, en este apartado:
void proceso(){
ENTRADA_OKS = digitalRead(ENTRADA_OK);
digitalWrite(SALIDA, HIGH);
while (digitalRead(ENTRADA_OK) == LOW) {
digitalWrite(SALIDA, LOW);
}
Necesito que al tener acceso autorizado me active la salida "SALIDA" si en dos minutos no se a activado la entrada "ENTRADA_OK" la salida se desactiva, pero dentro de esos dos minutos se activa la entrada "ENTRADA_OK" el tiempo se anula y la salida queda activada hasta que se desactive la entrada "ENTRADA_OK".
Lo e intentado de todas las maneras y no soy capaz de hacer esto.
Cualquier cosa ayuda.
Saludos.