Ajout de plusieurs TAG nfc

Bonjour a tous ! Hier j’ai décidé me lancer dans un projet de portail a ouverture par NFC
Apres avoir trouvé des idées a droite a gauche j’ai réussi a construire un code mais j’ai un problème (forcement sinon c’est pas drôle :grinning: ) Je n’arrive pas a jouter une autre adresse de tag

Voici mon code

#include <SPI.h>
#include <RFID.h>

int relais = 7;
int ledR = 6;

RFID monModuleRFID(10,9);

int UID[5]={};
int MASTERKEY[5]={224,64,23,75,252};

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  monModuleRFID.init();  
  pinMode(relais, OUTPUT);
  pinMode(ledR, OUTPUT);
  digitalWrite(ledR, HIGH);

}

void loop()
{
    if (monModuleRFID.isCard()) {  
          if (monModuleRFID.readCardSerial()) {        
            Serial.print("L'UID est: ");
            for(int i=0;i<=4;i++)
            {
              UID[i]=monModuleRFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
            Serial.println("");
          }
          
          if (UID[0] == MASTERKEY[0]
           && UID[1] == MASTERKEY[1]
           && UID[2] == MASTERKEY[2]
           && UID[3] == MASTERKEY[3]
           && UID[4] == MASTERKEY[4])
          {
              digitalWrite(ledR, LOW);
              digitalWrite(relais, HIGH);
              delay(3000);
              digitalWrite(relais, LOW);
              digitalWrite(ledR, HIGH);
          }
          else
          {
              digitalWrite(relais, LOW);
              digitalWrite(ledR, HIGH);
              delay(100);
              digitalWrite(ledR, LOW);
              delay(100);
              digitalWrite(ledR, HIGH);
              delay(100);
              digitalWrite(ledR, LOW);
              delay(100);
              digitalWrite(ledR, HIGH);

          }          
          monModuleRFID.halt();
    }
    delay(1);    
}

J’ai essayé plusieurs manières mais rien ne marche

Merci d’avance :wink:

Vous avez essayé quoi?

Suffit de créer un tableau à 2 dimensions pour les ID reconnus et les parcourir tous lors d’un test (pas besoin de prendre des int, des byte suffisent)

int MASTERKEY[5]={224,64,23,75,252}; devient

byte MASTERKEY[][5]=
{
    {224,64,23,75,252}, // 1er tag 
    {200,100,50,25,12}, // 2nd tag 
    {210,110,60,35,22}  // 3eme tag 
};

Et la boucle qui test les 5 nombre doit être dédoublée pour parcourir tous les tableaux

Salut ! Merci pour ta réponse, pour ce qui est de la création du tableau j'ai compris par contre pour dédoubler la boucle je comprend pas. Il faut refaire exactement la meme ?

Merci :wink:

Bonjour

antho13180:
Salut ! Merci pour ta réponse, pour ce qui est de la création du tableau j’ai compris

faut dire que je vous ai donné le code…

antho13180:
par contre pour dédoubler la boucle je comprend pas. Il faut refaire exactement la meme ?

faut dire que je ne vous ai pas donné le code… un peu exprès… :slight_smile:

Aujourd’hui pour tester l’égalité vous faites cela

if (UID[0] == MASTERKEY[0]
   && UID[1] == MASTERKEY[1]
   && UID[2] == MASTERKEY[2]
   && UID[3] == MASTERKEY[3]
   && UID[4] == MASTERKEY[4])   {

c’est un peu “manuel” non?

En plus maintenant MASTERKEY sera un tableau à 2 dimension.

La première clé est
MASTERKEY[[color=red][b]0[/b][/color]][[b][color=blue]0[/color][/b]], MASTERKEY[[color=red][b]0[/b][/color]][[b][color=blue]1[/color][/b]], MASTERKEY[[color=red][b]0[/b][/color]][[b][color=blue]2[/color][/b]], MASTERKEY[[color=red][b]0[/b][/color]][[b][color=blue]3[/color][/b]],MASTERKEY[[color=red][b]0[/b][/color]][[b][color=blue]4[/color][/b]]

La deuxième clé est
MASTERKEY[[color=red][b]1[/b][/color]][[b][color=blue]0[/color][/b]], MASTERKEY[[color=red][b]1[/b][/color][[b][color=blue]1[/color][/b]], MASTERKEY[[color=red][b]1[/b][/color]][[b][color=blue]2[/color][/b]], MASTERKEY[[color=red][b]1[/b][/color]][[b][color=blue]3[/color][/b]],MASTERKEY[[color=red][b]1[/b][/color]][[b][color=blue]4[/color][/b]]

etc

ça vous donne pas envie de faire un truc du genre

for (byte NoDeClef = 0; NoDeClef < maxClefs; NoDeClef++) {
   for (byte indiceDanslaClef = 0; indiceDanslaClef < 5; indiceDanslaClef++) {
        // ici faire quelque chose avec MASTERKEY[NoDeClef][indiceDanslaClef]
       // genre comparer UID[indiceDanslaClef] avec MASTERKEY[NoDeClef][indiceDanslaClef] par exemple
   }
}

Je vous laisse chercher, postez ce que vous essayez…

Vous m'avez un peu perdu mais je vais essayé de gratter qqchose

Merci :wink:

Bonjour,

Un peu le même problème. J'autorise un accès par la combinaison de 2 badges RFID (clé UID style : "76 AB 10 EF") enregistrés et seulement. Il faut que les 2 badges soient enregistrés pour avoir l'accès.
Les badges pour la 1ère autorisation sont dans une liste, ceux pour la 2ème autorisation dans une autre liste. Il y a 10 badges autorisés pour chaque étape d'autorisation.
Est-ce que je peux créer une liste de badge OK pour la 1ère autorisation, lire et stocker le résultat et puis faire la même chose pour la 2ème autorisation ?
La combinaison des 2 donnant l'accès.
La lecture de ces 2 badges se fait en même temps sur le module RC522 car le porteur a les 2 badges sur lui dans un même "blister".
Merci de vos aides.

Avez vous testé de lire deux badges d’un coup?