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.
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.
tous les exemples de base d'un module MFRC522 montrent comment lire l'ID.... quelles recherches avez vous effectuées ?
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...
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...
Quelle librairie utilisez vous ? --> jetez un oeil sur celle là (l'exemple AccessControl.ino est assez complet et vous montre comment traiter plusieurs cartes)
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...
Bonsoir
L'UID est sur 4 bytes
Perso je fais çà
unsigned long UID=0;
UID = *((unsigned long *)mfrc522.uid.uidByte); //recup UID unsigned long
Merci à vous deux @J-M-L et @Artouste. Je vais essayer ce que vous m'avez proposé.
Je vous tient au courant...
Artouste:
Bonsoir
L'UID est sur 4 bytes
Perso je fais çà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
Merci à tous pour votre aide voici le programme pour ceux qui sont interressés!!
/*
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);
}
Vous n'avez en fait pas besoin de la variable, vous pouviez directement imprimer module_rfid.uid.uidByte
Salut,
J'utilise également un MFRC522 pour les tags rfid voici ce que j'utilise et qui marche pour le moment
#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