Hola me llamo Daniel necesito ayuda con un código...
Estoy trabajando con un arduino uno y un mrfc 522 con 4 llaveros.
La idea es que al pasar cualquiera de los tag por el lector se active un relay por dos segundos y se apague....y al pasarlo otra ves (cualquiera de los 4) se active un segundo relay tambien por dos segundos y se apague. los tengo en las salidas 5 y6 la idea es que se alternen uno despues del otro....
El problema es que no se alternan...encienden en un orden aleatorio por ej: 5 5 6 5 5 6 6 5..............
El orden tendria que ser.....5 6 5 6 5 6 5 6.......infinitamente cada ves que pase cualquiera de los 4 tag
es la primera ves que escribo asi que espero pueda adjuntar bien el codigo....
Yo baje uno de internet y lo modifique todo en base a lo que yo necesito.
Muchas gracias!
#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
void setup() {
pinMode (5,OUTPUT);
pinMode (6,OUTPUT);
pinMode (7,OUTPUT);
Serial.begin(9600); //Iniciamos La comunicacion serial
SPI.begin(); //Iniciamos el Bus SPI
mfrc522.PCD_Init(); // Iniciamos el MFRC522
Serial.println("Control de acceso:");
#define r5(void) {digitalWrite(5,HIGH); delay(2000); digitalWrite(5,LOW);}
#define r6(void) {digitalWrite(6,HIGH); delay(2000); digitalWrite(6,LOW);}
}
byte ActualUID[4]; //almacenará el código del Tag leído
byte Usuario1[4]= {0x6A, 0x85, 0x69, 0x25} ; //código del usuario 1
byte Usuario2[4]= {0x8C, 0x14, 0x66, 0x03} ; //código del usuario 2
byte Usuario3[4]= {0xAC, 0x8E, 0x68, 0x03} ; //3
byte Usuario4[4]= {0x0C, 0xDA, 0x6A, 0x03} ; //4
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))
{ Serial.println("Acceso concedido...");
r5 (void) ;}
else if(compareArray(ActualUID,Usuario2))
{Serial.println("Acceso concedido...");
r5 (void) ;}
else if(compareArray(ActualUID,Usuario3))
{Serial.println("Acceso concedido...");
r5 (void) ;}
else if(compareArray(ActualUID,Usuario4))
{Serial.println("Acceso concedido...");
r5 (void) ;}
else
Serial.println("Acceso denegado...");
// Terminamos la lectura de la tarjeta tarjeta actual
mfrc522.PICC_HaltA();
}
}
{
if ( mfrc522.PICC_IsNewCardPresent())
{ 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))
{ Serial.println("Acceso concedido...");
r6 (void);}
else if(compareArray(ActualUID,Usuario2))
{Serial.println("Acceso concedido...");
r6 (void);}
else if(compareArray(ActualUID,Usuario3))
{Serial.println("Acceso concedido...");
r6 (void);}
else if(compareArray(ActualUID,Usuario4))
{Serial.println("Acceso concedido...");
r6 (void);}
else
Serial.println("Acceso denegado...");
// 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);
} [code]