Go Down

Topic: MFRC522 stockage dans une variable (Read 239 times) previous topic - next topic

kynecron

Bonjour à tous,

Je souhaiterai savoir comment stocker un(e) UID d'une carte lu grâce à un module RFID (MFRC522 fourni dans le kit de démarrage arduino) dans une seule variable afin de l'afficher ensuite sur un écran lcd.


Merci de vos réponses.

J-M-L

tous les exemples de base d'un module MFRC522 montrent comment lire l'ID.... quelles recherches avez vous effectuées ?
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

kynecron

Bonjour @J-M-L ,

Je sais exactement comment lire un ID grâce à l'exemple dumplinfo. Ce que je cherche à savoir c'est comment stocker l'ID dans une variable.
Il ne me semble pas que ceci soit expliquer dans les exemples fournis avec la bibliothèque MFRC522 mais je peux me tromper...

J-M-L

#3
May 19, 2018, 06:54 pm Last Edit: May 19, 2018, 06:57 pm by J-M-L
Bonjour @J-M-L ,

Je sais exactement comment lire un ID grâce à l'exemple dumplinfo. Ce que je cherche à savoir c'est comment stocker l'ID dans une variable.
Il ne me semble pas que ceci soit expliquer dans les exemples fournis avec la bibliothèque MFRC522 mais je peux me tromper...
Quelle librairie utilisez vous ? --> jetez un oeil sur celle là (l'exemple AccessControl.ino est assez complet et vous montre comment traiter plusieurs cartes)
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

Artouste

Bonjour @J-M-L ,

Je sais exactement comment lire un ID grâce à l'exemple dumplinfo. Ce que je cherche à savoir c'est comment stocker l'ID dans une variable.
Il ne me semble pas que ceci soit expliquer dans les exemples fournis avec la bibliothèque MFRC522 mais je peux me tromper...
Bonsoir
L'UID est sur 4 bytes
Perso je fais çà

Code: [Select]
unsigned long UID=0;

UID = *((unsigned long *)mfrc522.uid.uidByte); //recup UID  unsigned long

kynecron

Merci à vous deux @J-M-L et @Artouste. Je vais essayer ce que vous m'avez proposé.

Je vous tient au courant...

J-M-L

Bonsoir
L'UID est sur 4 bytes
Perso je fais çà

Code: [Select]
unsigned long UID=0;

UID = *((unsigned long *)mfrc522.uid.uidByte); //recup UID  unsigned long


oui ça marche quand l'UID est sur 4 octets - certaines cartes ont des UID plus longs
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

kynecron

Merci à tous pour votre aide voici le programme pour ceux qui sont interressés!!

Code: [Select]
/*
Branchement:
RFID: RST = 9 / SOI = 12 / MI = 11 / MOSI = 13 / SDA = 10
lcd : RS = 7 / E = 6 / D4 = 5 / D5 = 4 / D6 = 3 / D7 = 2
 */

#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);

#define RST_PIN 9
#define SS_PIN 10
MFRC522 module_rfid(SS_PIN, RST_PIN);
unsigned long UID=0;

void setup() {
  SPI.begin();
  module_rfid.PCD_Init();
  lcd.begin (16,2);
  Serial.begin (9600);
}

void loop() {
  lcd.clear ();
  lcd.print("Scannez votre");
  lcd.setCursor(0, 1);
  lcd.print("carte ou badge..");

  if ( ! module_rfid.PICC_IsNewCardPresent())
  {
    return;
  }

  if ( ! module_rfid.PICC_ReadCardSerial())
  {
    return;
  }
  Serial.println (UID);
  UID = *((unsigned long *)module_rfid.uid.uidByte);
  delay (10);
  lcd.clear ();
  lcd.print ("UID: ");
  lcd.setCursor (0, 1);
  lcd.print (UID);
  delay (2000);
}

J-M-L

Vous n'avez en fait pas besoin de la variable, vous pouviez directement imprimer module_rfid.uid.uidByte
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

tom_sns

#9
May 20, 2018, 08:53 pm Last Edit: May 20, 2018, 08:55 pm by tom_sns
Salut,


J'utilise également un MFRC522 pour les tags rfid voici ce que j'utilise et qui marche pour le moment
Code: [Select]

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

rgb_lcd lcd;

const int colorR = 0;
const int colorG = 150;
const int colorB = 150;

#define SS_PIN 53   
#define RST_PIN 40

byte tagok = 0;

unsigned long sernum[2] = {0, 3643072285, };  // <-ICI Tu marques le numéro de ta carte

MFRC522 mfrc522(SS_PIN, RST_PIN);        // Create MFRC522 instance.
MFRC522::MIFARE_Key key;
void setup() {
  lcd.begin(16, 2);       
  lcd.setRGB(colorR, colorG, colorB);
  SPI.begin();                // Init SPI bus
  mfrc522.PCD_Init();        // Init MFRC522 card
lcd.print("Init afficheur ");
delay (2500);
lcd.clear();
lcd.print("Scan du badge ?");
lcd.setCursor(0, 2);
}

void loop() {

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

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

 
  for (byte i = 0; i < 4; i++) {

  }

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

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

  }

  if (tagok == 0) { // faire si carte inconnue
    lcd.print("Scan du badge");
    lcd.setCursor(0, 2);
    lcd.print("Badge Invalide");
    delay(3000);
    lcd.clear();
    lcd.print("Scan du badge :");
   
  }
  if (tagok >0) //faire si carte reconnue
  {

    lcd.setCursor(0, 1);
    if (sernum[0] == sernum[1]) lcd.print("Tag Reconnu" );
    lcd.clear();
    }

 
mfrc522.PICC_HaltA(); // Halt PICC

}


PS: Mon ecran LCD est branché en I2C

Go Up