Apriporta RFID con inserimento di 4 tag 13,56 Mhz

Ciao a tutti, sono alle prese con il mio apriporta che ho ultimato nella parte componentistica, ma ho dei problemi con questo sketch che ho trovato in rete e che mi piace. Sto usando arduino uno e il problema e che non riesco a inserire gli UID dei TAG, dovrei inserirne 4 nello sketch.

#include <SPI.h> 
#include <MFRC522.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>


#define SS_PIN 10 

#define RST_PIN 9 



#define LED_DENIED_PIN 7

#define LED_ACCESS_PIN 6

#define rele 2



LiquidCrystal_I2C lcd(0x27,16,2);

MFRC522 mfrc522(SS_PIN, RST_PIN); // Instance of the class


int code[] = {44,206,04,50}; //This is the stored UID (Unlock Card)

int codeRead = 0;


void setup() {

   Serial.begin(9600); 

   SPI.begin();       // Init SPI bus

   mfrc522.PCD_Init(); // Init MFRC522 

   Serial.println("Arduino RFID reading UID");



   pinMode( LED_DENIED_PIN , OUTPUT); 

   pinMode( LED_ACCESS_PIN , OUTPUT);

   pinMode(rele, OUTPUT); //cambiare 2 in rele per funzionare come relè
   


   lcd.init();

  // Print a message to the LCD.

  lcd.backlight();

  lcd.setCursor(0,0);

  lcd.print("IT Benvenuto");
  Serial.println("IT Benvenuto");
  lcd.setCursor(0,1);

  lcd.print("ES Bienvenidos");
  Serial.println("ES Bienvenidos");
}

void loop() {

  
if ( mfrc522.PICC_IsNewCardPresent())

    {

        if ( mfrc522.PICC_ReadCardSerial())

        {

           lcd.clear();

           Serial.print("Tag UID:");

           lcd.setCursor(0,0);

           lcd.print("Tag UID:");

           lcd.setCursor(0,1);


           for (byte i = 0; i < mfrc522.uid.size; i++) {  

                  Serial.print(mfrc522.uid.uidByte[i] < 0x27 ? " 0" : " "); 

                  Serial.print(mfrc522.uid.uidByte[i], HEX);

                  

                  lcd.print(mfrc522.uid.uidByte[i] < 0x27 ? " 0" : " ");

                  lcd.print(mfrc522.uid.uidByte[i], HEX);

                //  lcd.print(" ");

            }           

            
  
            int i = 0;

            boolean match = true;

            while(i<mfrc522.uid.size)

            {

    

               if(!(int(mfrc522.uid.uidByte[i]) == int(code[i])))

               {

                  match = false;

               }

              i++;

            }



            delay(2000);

           lcd.clear();

           lcd.setCursor(0,0);

           

           

           if(match)

           {

              digitalWrite( LED_ACCESS_PIN , HIGH);
              
              lcd.print("Accesso Valido");
              lcd.setCursor(0,1);
              lcd.print("Porta Aperta");

              Serial.println("\Accesso Valido");

              digitalWrite (rele, HIGH); //cambiare 2 in rele per funzionare come relè
              delay (1000);     // Tempo relè o led in stato ON
              digitalWrite (rele, LOW); //cambiare 2 in rele per funzionare come relè

              

           

    

           }else{

              digitalWrite( LED_DENIED_PIN , HIGH);
              
              lcd.print("Carta Errata");
              lcd.setCursor(0,1);
              lcd.print("Accesso Negato"); 

             Serial.println("\Carta Errata");

           }

             

             Serial.println("============================");

            

             mfrc522.PICC_HaltA();



             delay(1000); 

             reset_state();

        }

}

}

void reset_state()

{

    lcd.clear();

    lcd.setCursor(0,0);

    lcd.print("IT Benvenuto");
    Serial.println("IT Benvenuto");
    lcd.setCursor(0,1);
    lcd.print("ES Bienvenidos");
    Serial.println("ES Bienvenidos");
    

    digitalWrite( LED_ACCESS_PIN , LOW);

    digitalWrite( LED_DENIED_PIN , LOW);

}

Spero in un vostro prezioso aiuto. Grazie a tutti.

Questo è il tag valido.
Puoi aggiungere altre 3 variabili simili, oppure creare un array di array che vai a ciclare quando arriva una nuova lettura per vedere se c'è quello letto.

Aggiungo inoltre che l'array code[]potrebbe essere sostituito da un unsigned long con tutta probabilità: i tag RFID che più comunemente si trovano nei kit Arduino infatti, raramente hanno un UID più lungo di 32bit.

Salve, grazie per il suggerimento sono riuscito, con un aiuto, a risolvere il mio problema inserendo queste righe di codice:

#define MAXSCHEDE 5
int code[MAXSCHEDE][4] = {{44,206,04,50},
{44,206,04,50},
{44,206,04,50},
{44,206,04,50},
{44,206,04,50}};
boolean match = false;
        for(int sch=0;sch<MAXSCHEDE&&!match;sch++)
        {
            int i=0;
            match = true;
            while(i<mfrc522.uid.size)
            {
                if(!(int(mfrc522.uid.uidByte[i]) == int(code[sch][i])))
                  {
                     match = false;
                   }
                  i++;
             }
        }

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.