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 ..
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.