Liste de badges autorisés dans un tableau et lecture badge par lecteur RFID

Bonjour à tous et à toutes,

C'est mon premier post :slight_smile:
J'espère être dans les clous par rapport aux attentes du forum.

Le projet :
Lire un badge présenté au lecteur RFID (classique :RC522) et savoir s'il est présent dans un tableau de badges autorisés.
Tous mes badges ont une identification de la forme {nb1, nb2, nb3, nb4, nb5, nb6}

Le point d'arrivée :
Je m'inspire du post :
https://forum.arduino.cc/index.php?topic=441568.0

Mon point de blocage :

Comment déclarer le tableau des badges autorisés que j'appelle UIDbadges ?
Je fais une erreur dans sa déclaration dans le programme ci-dessous que je n'arrive pas à identifier.
Merci énormément pour votre aide.

damien

Mon programme :

int UIDbadges [] = {
  {39, 115, 30, 95, 21, 0},
  {131, 37, 169, 171, 164, 0},
  {18, 250, 216, 53, 5, 0},
  {103, 200, 245, 30, 68, 0}
};

void setup() {
//********Connaitre la taille du tableau et nombre de lignes
  Serial.begin(9600);
  int taille=sizeof(UIDbadges)/ sizeof(UIDbadges[0]);
  Serial.print(taille);
}

void loop() {
  // put your main code here, to run repeatedly:

}

Bonjour,

Soit tu déclares un tableau à deux dimensions, soit (plus élégant) tu déclares un type correspondant à l'identification d'un badge.

typedef int TBadge[6];

TBadge UIDbadges [] = {
  {39, 115, 30, 95, 21, 0},
  {131, 37, 169, 171, 164, 0},
  {18, 250, 216, 53, 5, 0},
  {103, 200, 245, 30, 68, 0}
};

Génial !
merci beaucoup
Je mets à jour le code et je poste le tout pour que tout le monde en profite

La suite du code :

J'arrive bien à lire la carte bien sûr.
Par contre, je ne sais pas encore récupérer un code du tableau des badges autorisés et le comparer :

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

//****Déclaration d'un tableau avec l'ensemble des badges valides :
typedef int TBadge[6];
TBadge UIDbadges [] = {
  {39, 115, 30, 95, 21, 0},
  {131, 37, 169, 171, 164, 0},
  {18, 250, 216, 53, 5, 0},
  {103, 200, 245, 30, 68, 0}
};


RFID RFID(A0,A1);

int UID[5]={};

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  RFID.init();  
  Serial.print("en attente.... ");
}


void loop()
{
  
  //********Connaitre le nombre de badges autorisés enregistrés dans le tableau UIDbadges
  int NbBadgesAutorises=sizeof(UIDbadges)/ sizeof(UIDbadges[0]);
  //Serial.print(NbBadgesAutorises);
  
  //*******************Affichage INFO Carte*****************************

    if (RFID.isCard()) {                                          // on vérifie s'il y a une carte
          if (RFID.readCardSerial()) {                            // on lit d'id de la carte
            
            Serial.println("L'UID de la carte scannée est: ");

            //********boucle affichage UID Scannée
            for(int i=0;i<=4;i++)
            {
              UID[i]=RFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
              Serial.println("");
              
            //********boucle de test pour savoir si l'UID Scannée existe dans le tableau UIDbadges
           
//*************************************
//*           TESTER SI UID = UIDBadgesautorisés[ligne_n]
//*
//*      hypothese : on teste chaque ligne du tableau des badges autorisé (le nombre de lignes correspond au nb de badges calculé plus haut : nbBadgesAutorises
//*        for (byte i = 0; i < nbBadgesAutorises; i++) {
//*                      }
//*             on compare le badge de la ligne(i) avec l'UID scannée
//*             
//*************************
           {
              Serial.println("la carte est bien autorisée");
            }
            else
            {
              Serial.println("la carte n'est pas dans la liste");
            }


            
          }  
     
          RFID.halt();
    }
    delay(100);    
    
}
}

Comment lire la ligne du tableau et la comparer à l'UDI scannée ?

Merci bcp

Pourquoi il y a 5 octets dans l'id lu et 6 octets dans la table des id?

C'est une erreur de ma part d'un mauvais copier_coller.
Toutes mes excuses
Je repost le bon code

La suite du code :

J'arrive bien à lire la carte bien sûr.
Par contre, je ne sais pas encore récupérer un code du tableau des badges autorisés et le comparer :

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

//****Déclaration d'un tableau avec l'ensemble des badges valides :
typedef int TBadge[5];
TBadge UIDbadges [] = {
  {39, 115, 30, 95, 21},
  {131, 37, 169, 171, 164},
  {18, 250, 216, 53, 5},
  {103, 200, 245, 30, 6}
};


RFID RFID(A0,A1);

int UID[5]={};

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  RFID.init();  
  Serial.print("en attente.... ");
}


void loop()
{
  
  //********Connaitre le nombre de badges autorisés enregistrés dans le tableau UIDbadges
  int NbBadgesAutorises=sizeof(UIDbadges)/ sizeof(UIDbadges[0]);
  //Serial.print(NbBadgesAutorises);
  
  //*******************Affichage INFO Carte*****************************

    if (RFID.isCard()) {                                          // on vérifie s'il y a une carte
          if (RFID.readCardSerial()) {                            // on lit d'id de la carte
            
            Serial.println("L'UID de la carte scannée est: ");

            //********boucle affichage UID Scannée
            for(int i=0;i<=4;i++)
            {
              UID[i]=RFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
              Serial.println("");
              
            //********boucle de test pour savoir si l'UID Scannée existe dans le tableau UIDbadges
           
//*************************************
//*           TESTER SI UID = UIDBadgesautorisés[ligne_n]
//*
//*      hypothese : on teste chaque ligne du tableau des badges autorisé (le nombre de lignes correspond au nb de badges calculé plus haut : nbBadgesAutorises
//*        for (byte i = 0; i < nbBadgesAutorises; i++) {
//*                      }
//*             on compare le badge de la ligne(i) avec l'UID scannée
//*             
//*************************
           {
              Serial.println("la carte est bien autorisée");
            }
            else
            {
              Serial.println("la carte n'est pas dans la liste");
            }


            
          }  
     
          RFID.halt();
    }
    delay(100);    
    
}
}

Comment lire la ligne du tableau et la comparer à l'UDI scannée ?

Merci bcp

Au passage, je mets le schéma du montage
:wink:

LODAM:
Comment lire la ligne du tableau et la comparer à l'UDI scannée ?

Il faut deux boucles imriquées

     //*************************************
      //*           TESTER SI UID = UIDBadgesautorisés[ligne_n]
      //*
      //*************************
      bool found=false;
      for (int i=0; i<NbBadgesAutorises && !found; i++)
      {
        found=true;
        for (int j=0; j<5; j++)
        {
          if (UIDbadges[i][j]!=UID[j])
          {
            found=false;
            break;
          }
        }
      }
      if (found)
      {
        Serial.println("la carte est bien autorisée");
      }
      else
      {
        Serial.println("la carte n'est pas dans la liste");
      }

Fantastique !

Merci beaucoup @kamill :slight_smile:

Voici donc le code en entier.
Je continuerai à avancer ce soir et posterai les mise à jour :slight_smile:

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

//****Déclaration d'un tableau avec l'ensemble des badges valides :
typedef int TBadge[5];
TBadge UIDbadges [] = {
  {39, 115, 30, 95, 21},
  {131, 37, 169, 171, 164},
  {18, 250, 216, 53, 5},
  {0, 126, 203, 163, 22}
};


RFID RFID(A0,A1);

int UID[5]={};
//int MASTERKEY[5]={214,205,96,172,215}; // UID du badge 1

void setup()
{
  Serial.begin(9600);
  SPI.begin();
  RFID.init();  
  Serial.print("en attente.... ");
}


void loop()
{
  
  //********Connaitre le nombre de badges autorisés enregistrés dans le tableau UIDbadges
  int NbBadgesAutorises=sizeof(UIDbadges)/ sizeof(UIDbadges[0]);
  //Serial.print(NbBadgesAutorises);
  
  //*******************Affichage INFO Carte*****************************

    if (RFID.isCard()) {                                          // on vérifie s'il y a une carte
          if (RFID.readCardSerial()) {                            // on lit d'id de la carte
            
            Serial.println("L'UID de la carte scannée est: ");

            //********boucle affichage UID Scannée
            for(int i=0;i<=4;i++)
            {
              UID[i]=RFID.serNum[i];
              Serial.print(UID[i],DEC);
              Serial.print(".");
            }
              Serial.println("");
              
            //********boucle de test pour savoir si l'UID Scannée existe dans le tableau UIDbadges
                bool found=false;
                for (int i=0; i<NbBadgesAutorises && !found; i++)
                    {
                    found=true;
                    for (int j=0; j<5; j++)
                        {
                         if (UIDbadges[i][j]!=UID[j])
                              {
                              found=false;
                              break;
                              }
                        }
                    }
                    if (found)
                    {
                    Serial.println("la carte est bien autorisée");
                    }
                    else
                    {
                    Serial.println("la carte n'est pas dans la liste");
                    }
  
          RFID.halt();
    }
    delay(100);    
    
}
}

Bonsoir.

Tu peux t'inspirer de ma page où je fais comparer des badges présentés avec une tableau d'ID.

http://arduino.amt69.org/Arduino2017-lecon8.html

Bonjour
Merci @micol
Je regarde ta page et effectivement cela me sera utile car il y a d'autres formulations très intéressantes.
Merci pour ce lien
bon WE
damien