Identification par badge MFRC522

Bonjour,
Dans le cadre de la place en place d'un contrôle d'accès, j'utilise un MFRC522 avec la librairie RFID.
Je me suis inspiré de programmes trouvés sur le net. Ils permettent lors de la lecture d'un badge "valide" l'ouverture d'une porte via la commande d'un relai (classique)!

Mon problème :
J'aimerai que le badge soit reconnu nominativement, c'est a dire que sur un afficheur je puisse avoir "Bonjour Toto" si le badge appartient à toto
J'ai 5 utilisateurs à gerer.
Je connais les UID des badges (je crois, j'ai utilisé DUMPINFO
La gestion de l'afficheur ne me pose pas de probleme.
En revanche je ne sais pas comment faire pour que soit reconnu nominativement les badges .... en utilisant des tableaux dans lesquels seraient stockés le badges identifiés ( byte toto[4]={a1,b2,c3,55})? oui, mais comment ? je suis un noob et e n'y connais pas grand chose encore...mais je ne demande qu'à apprendre..
Merci de votre aide

Bonjour
tu peux ti’nspirer de ça (prevu pour 10) utilisateurs
si tu utilise un afficheur lcd tu utilise un lcd.print, sinon tu adapte à ton afficheur

/*
 * Dump serial number of a MIFARE RFID card using a RFID-RC522 reader
 * Uses MFRC522 - Library to use ARDUINO RFID MODULE KIT 13.56 MHZ WITH TAGS SPI W AND R BY COOQROBOT.
 * https://github.com/miguelbalboa/rfid
 -----------------------------------------------------------------------------
 * Pin layout should be as follows:
 * Signal     Pin              Pin               Pin
 *            Arduino Uno      Arduino Mega      MFRC522 board
 * ------------------------------------------------------------
 * Reset      9                5                 RST
 * SPI SS     10               53                SDA
 * SPI MOSI   11               52                MOSI
 * SPI MISO   12               51                MISO
 * SPI SCK    13               50                SCK
 *
 * Hardware required:
 * Arduino
 * PCD (Proximity Coupling Device): NXP MFRC522 Contactless Reader IC
 * PICC (Proximity Integrated Circuit Card): A card or tag using the ISO 14443A interface, eg Mifare or NTAG203.
 * The reader can be found on eBay for around 5 dollars. Search for "mf-rc522" on ebay.com.
 */

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

#define SS_PIN 10    //Arduino Uno
#define RST_PIN 9
byte tagok = 0;

unsigned long sernum[11] = {0, 679864085, 3478850816, 1159921925, 3278950471, 0, 0, 0, 0,0, 1149839889}; //poste 0 N° carte lue, poste 1 à 9 pour UID carte a tester, poste 10 carte master

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
int led = 8;
void setup() {
  pinMode(led, OUTPUT);
  Serial.begin(57600);        // Initialize serial communications with the PC
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
Serial.println("SERIAL OK ");
}

void loop() {

  digitalWrite(led, LOW);
  // Look for new cards
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    return;
  }

  // Select one of the cards
  if ( ! mfrc522.PICC_ReadCardSerial())    return;

  Serial.print("Card UID:");    //Dump UID
  for (byte i = 0; i < 4; i++) {
    Serial.print(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " ");
    Serial.print(mfrc522.uid.uidByte[i], HEX);
  }

  sernum[0] = *((unsigned long *)mfrc522.uid.uidByte); //recup num serie lu long unsigned

  Serial.print(" ");
  Serial.print(sernum[0]);
  Serial.print(" ");
  Serial.print(sernum[0], HEX);
  Serial.print(" ");
  tagok = 0;
  for  (byte i = 1; i < 10; i++) {
    if (sernum[0] == sernum[i]) tagok = 1; // carte reconnue dans la liste

  }
  if (sernum[0] == sernum[10]) tagok = 255; // carte master reconnue

  if (tagok == 0) { // faire si carte inconnue
    Serial.print("TAG INCONNU");
  }
  if (tagok >0) //faire si carte reconnue
  {
    digitalWrite(led, HIGH);
    Serial.print("TAG OK ");
    if (sernum[0] == sernum[1]) Serial.print("Badge STOCK     " ); 
    if (sernum[0] == sernum[2]) Serial.print("Badge LABO      " ); 
    if (sernum[0] == sernum[3]) Serial.print("Bramble card OK " ); 
    if (sernum[0] == sernum[4]) Serial.print("Badge ANECHO    " ); 
    if (sernum[0] == sernum[10]) Serial.print("Badge MASTER    " ); 
    delay(50);
    digitalWrite(led, LOW);
  }

  if (tagok == 255) //faire si carte master reconnue
  {

    Serial.print("CARTE MASTER RECONNUE");

  }


Serial.println();

mfrc522.PICC_HaltA(); // Halt PICC

}

Tu peux faire aussi du plus evolué en inscrivant sur la carte directement des infos complementaires

Ah ouiii....très bon tout ça...merci beaucoup...je n'avais pas trouvé ce code là...
Bonne journée

phil77560:
Ah ouiii....très bon tout ça...merci beaucoup...je n'avais pas trouvé ce code là...
Bonne journée

Il me semble l'avoir déjà plus ou moins posté sur le forum recemment .

edit : et en plus c'etait déjà avec toi ! ...

La poisse… voilà ce que c’est quand on bosse a deux sur le meme projet et avec le meme compte sans trop se concerter…
1000 Excuses à tous…
Il y a t’il moyen (question au modo) de supprimer ce post ?
Je vais aller tirer les oreilles à mon pote…
Toutes mes excuses encore… la honte :blush: :blush: :blush:

Bonjour,

Je me permet de déterrer ce post mais j'aimerai comprendre pourquoi vous avez des tags au format numériques dans votre code,alors que moi j'ai un format chiffres et lettre (27 A7 24 D9) ??

Merci davance

yohann74:
Bonjour,

Je me permet de déterrer ce post mais j'aimerai comprendre pourquoi vous avez des tags au format numériques dans votre code,alors que moi j'ai un format chiffres et lettre (27 A7 24 D9) ??

Merci davance

bonjour
ça dépend du choix de la présentation numerique choisie hexadecimale ou decimale
27 A7 24 D9 ou ‭665265369‬ çà represente le meme nombre

Bonjour Artouste et merci ! Me doutais que c'était un truc dans le genre mais je n'arrive toujours pas a faire fonctionner, ni a comprendre le code que tu as mis plus haut :

C'est la ligne unsigned long sernum[11] = {0, 6798...} que je ne comprend pas. plusieurs questions :

-Je crois comprendre que cette ligne intègre les différents tags . si oui c'est par ordre chronologique genre le 1er c'est 0 (poste 0 N° carte lue comme tu le notes) et ensuite ce sont les tags 1, 2,3 jusqu'à 9 ?

-Si j'y intègre mon Tag il ne le reconnait pas (je parle bien en décimal) il me marque :
SERIAL OK
Card UID: 27 A7 24 D9 3643057959 D924A727 TAG INCONNU

-Si je veux intégrer un compte a décrémenter je pourrais utiliser ce "sernum" ??

yohann74:
Bonjour Artouste et merci ! Me doutais que c'était un truc dans le genre mais je n'arrive toujours pas a faire fonctionner, ni a comprendre le code que tu as mis plus haut :

C'est la ligne unsigned long sernum[11] = {0, 6798...} que je ne comprend pas. plusieurs questions :

-Je crois comprendre que cette ligne intègre les différents tags . si oui c'est par ordre chronologique genre le 1er c'est 0 (poste 0 N° carte lue comme tu le notes) et ensuite ce sont les tags 1, 2,3 jusqu'à 9 ?

-Si j'y intègre mon Tag il ne le reconnait pas (je parle bien en décimal) il me marque :
SERIAL OK
Card UID: 27 A7 24 D9 3643057959 D924A727 TAG INCONNU

-Si je veux intégrer un compte a décrémenter je pourrais utiliser ce "sernum" ??

C'est un trés vieux code que je n'utilise plus depuis longtemps
là tu obtiens la valeur décimale ( en gras) du badge lu, valeur décimale que tu peux utiliser directement pour remplacer un des poste du tableau dans le programme
Card UID: 27 A7 24 D9 3643057959 D924A727

effectivement ça marche !! Merci