RFID - ALLUMER LED TANT QUE LE TAG EST LU

Bonsoir, je débute dans la RFID et j aimerai faire un montage qui allumerai une led tant que le bon TAG est détecté. sur le module rc422
Pouvez vous m 'orienter ? Je posséde un arduino UNO, j'arrive à faire tourner les exemples de contrôle d'accès mais le code ne correspond pas à ma demande puisque qu'il allume la led 3s puis l'éteint?
avez vous des exemples de codes qui repondéraient a mon cahier des charges?
Je vous remercie par avance.

Il existe une bibliothèque pour lire les tags RFID avec un arduino, regarde les exemples, notamment celui-ci

J'ai reussi ce que je voulais faire. il lit le numero de serie de la carte et compare avec celui referencé dans le code. tant que la carte est presente la sortie est activé sinon elle est off.
Comment faire pour qu'il lise et compare un numero attitré a la carte et non son numero de serie? le but étant de pouvoir dupliquer les cartes facilement en cas de perte ( sans avoir a modifier l'id correct dans le code)

Merci a vous

le but étant de pouvoir dupliquer les cartes facilement en cas de perte

Si vous avez perdu la carte, vous ne pouvez plus la dupliquer puisqu'elle n'est plus en votre possession par définition...

Dans la bibliothèque listée ci dessus, il y a un exemple qui s'appelle RFID-Cloner.ino.

Ckirom:
J'ai reussi ce que je voulais faire. il lit le numero de serie de la carte et compare avec celui referencé dans le code. tant que la carte est presente la sortie est activé sinon elle est off.
Comment faire pour qu'il lise et compare un numero attitré a la carte et non son numero de serie? le but étant de pouvoir dupliquer les cartes facilement en cas de perte ( sans avoir a modifier l'id correct dans le code)

Merci a vous

Bonjour
Dans ce cas ,il ne faut pas se préoccuper de l'UUID (N° de serie)
Il "suffit" d'ecrire avec une clef "secrete" une/des infos dans la zone RW du tag
çà permet par exemple entre autres d'attribuer une date de validité ou des "credits"

Merci Artouste, Quelle serait la commande à ecrire pour qu'il verifie ce parametre et non l'UUID ?

Actuellement mon code est le suivant:

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

#define relayIN         3
#define RedLed          4

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

unsigned long sernum[11] = {2, 8, 0, 0, 9, 4, 0, 3, 9, 1,2800940391 }; //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;

void setup() {

  pinMode(relayIN, OUTPUT);
  digitalWrite(relayIN, HIGH);
  pinMode(RedLed, OUTPUT);
  digitalWrite(RedLed, LOW);
  
  Serial.begin(9600);        // Initialize serial communications with the PC
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
  Serial.println("LECTEUR OK ");
}

void loop() {
  mfrc522.PCD_Init();        // Init MFRC522 card
  
  
  if ( ! mfrc522.PICC_IsNewCardPresent()) {
    Serial.println(" PAS DE BADGE PRESENT ");
      digitalWrite(relayIN, HIGH);
  }

  // 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
  {
    Serial.print("TAG OK ");
  }

  if (tagok == 255) //faire si carte master reconnue
  {
    Serial.print(" CARTE MASTER RECONNUE ");
    digitalWrite(relayIN, LOW);

    
  }
  Serial.println();
  delay(100); // delai entre 2 lectures apres reconnaissance tag
}

étudiez les exemples. Il y en a qui jouent avec les data stockées dans la carte, entre autre ReadAndWrite.ino

je vais regarder ca, merci

à vrai dire je suis un peu perdu .. :frowning: avez vous une piste ?

ben la piste est dans les exemples...

voici la partie du code qui lit les data et les modifie

    // Read data from the block
    Serial.print(F("Reading data from block ")); Serial.print(blockAddr);
    Serial.println(F(" ..."));
    status = (MFRC522::StatusCode) mfrc522.MIFARE_Read(blockAddr, buffer, &size);
    if (status != MFRC522::STATUS_OK) {
        Serial.print(F("MIFARE_Read() failed: "));
        Serial.println(mfrc522.GetStatusCodeName(status));
    }
    Serial.print(F("Data in block ")); Serial.print(blockAddr); Serial.println(F(":"));
    dump_byte_array(buffer, 16); Serial.println();
    Serial.println();

    // Authenticate using key B
    Serial.println(F("Authenticating again using key B..."));
    status = (MFRC522::StatusCode) mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, trailerBlock, &key, &(mfrc522.uid));
    if (status != MFRC522::STATUS_OK) {
        Serial.print(F("PCD_Authenticate() failed: "));
        Serial.println(mfrc522.GetStatusCodeName(status));
        return;
    }

    // Write data to the block
    Serial.print(F("Writing data into block ")); Serial.print(blockAddr);
    Serial.println(F(" ..."));
    dump_byte_array(dataBlock, 16); Serial.println();
    status = (MFRC522::StatusCode) mfrc522.MIFARE_Write(blockAddr, dataBlock, 16);
    if (status != MFRC522::STATUS_OK) {
        Serial.print(F("MIFARE_Write() failed: "));
        Serial.println(mfrc522.GetStatusCodeName(status));
    }
    Serial.println();

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