Comment créer un tableau a 2 dimensions (unidimensionnel)

Bonjour,

Je suis sur un projet de lecture de badges RFID pour démarrer un PC. J'aimerais enregistrer 2 badges valides, c'est a dire 2 badges qui démarrent l'ordinateur. Je sais qu'il faut créer un tableau unidimensionnel, mais je ne sais pas comment le créer et ou placer les commandes sur le tableau. Je met le code déjà réalisé ci-dessous :

#include <SPI.h>
#include <MFRC522.h>
// ecrire ici le numero UID du bon badge
const byte bonUID[4] = { 167, 60, 176, 18 };
//
const int LedVerte = 2;  // LED verte
const int LedRouge = 3;  // LED rouge
const int relais = 1;    // relais
const int pinRST = 5;    // pin RST du module RC522
const int pinSDA = 53;   // pin SDA du module RC522
MFRC522 rfid(pinSDA, pinRST);

void setup() {
  // put your setup code here, to run once:
  SPI.begin();
  rfid.PCD_Init();
  pinMode(LedVerte, OUTPUT);
  pinMode(LedRouge, OUTPUT);
  pinMode(relais, OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  int refus = 0;                     // quand cette variable n'est pas nulle, c'est que le code est refusé
  if (rfid.PICC_IsNewCardPresent())  // on a dédecté un tag
  {
    if (rfid.PICC_ReadCardSerial())  // on a lu avec succès son contenu
    {
      for (byte i = 0; i < rfid.uid.size; i++)  // comparaison avec le bon UID
      {
        if (rfid.uid.uidByte[i] != bonUID[i]) {
          refus++;
        }
      }
      if (refus == 0)  // UID accepté
      {
        digitalWrite(relais, HIGH);    // Le relais laisse passer le signal du PC.
        digitalWrite(LedVerte, HIGH);  //Allume la led verte (LedVerte).
        delay(1000);                   //Le programme attend 1 sec.
        digitalWrite(relais, LOW);     //Le relais stoppe le passage du signal.
        delay(500);                    //Le programme attend 0,5 sec
        digitalWrite(LedVerte, LOW);   //Allume la led verte (LedVerte).
        //Résumé de la partie du programme : allume la led verte (LedVerte) et active le relais pendant 1 sec.

      } else {                         // UID refusé
        digitalWrite(LedRouge, HIGH);  //Allume la led rouge (LedRouge).
        delay(1500);                   //Le programme attend 1,5 sec.
        digitalWrite(LedRouge, LOW);   //Eteint la led rouge (LedRouge).
          //Résumé e la partie du programme : allume la led rouge (LedRouge) et active buzzer pendant 3 secondes
      }
    }
  }
}

PS : si je n'ai pas donné assez d'informations, dites le moi

Tu as deux possibilité soit tu garde ton tableau à une dimension et tu rajoute dans ce tableau les 4 entrées de ton UID. il faudra alors dans ta boucle commencer à index*4 au lieu de 0

for (byte i = 0; i < rfid.uid.size; i++)  // comparaison avec le bon UID
      {
        if (rfid.uid.uidByte[i] != bonUID[i]) {
          refus++;
        }
      }

devient

for (byte i = index*4; i < (index*4)+rfid.uid.size; i++)  // comparaison avec le bon UID
      {
        if (rfid.uid.uidByte[i] != bonUID[i]) {
          refus++;
        }
      }

Tu pourras du coup créer une fonction dédié, qui prendrait en paramètre l'index à tester.

Soit tu créé effectivement un tableau à deux dimensions

for (byte i = index*4; i < (index*4)+rfid.uid.size; i++)  // comparaison avec le bon UID
      {
        if (rfid.uid.uidByte[i] != bonUID[index][i]) {
          refus++;
        }
      }

Merci pour la réponse, mais je ne suis pas encore capable de faire ca car je ne connais pas vraiment le fonctionnement de la partie détection du badge car j'ai récupéré cette partie du code sur internet.

Dans ce cas il faudrait que tu comprennes ce que le programme fait, avant de vouloir le faire évoluer :frowning:

Les parties que je t'ai indiqué, c'est à dire le for actuellement permet de tester si les 4 octets lues sur ta carte(UID), corresponds aux 4 octets enregistrés dans bonUID.
Donc ce que tu veux faire, c'est ajouter 4 nouveaux octets dans aux UID de bonUID et comparer les 4 octets de chaque UDI sauvegardé à celui lu sur ta carte

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