Bonjour
Je construis une conteuse pour mon fils avec un lecteur mp3 série et un lecteur RFID pour détecter les puces qui seront collées sur ses livres. J'ai pas encore fini mais ça fonctionne vraiment bien.
J'ai un seul problème: j'aimerais que le lecteur de carte RFID n'émette pas d'ondes entre deux lectures.
J'ai essayé plein de choses, même de couper l'alimentation du lecteur entre deux lecture (avec un transistor commandé par l'arduino), mais cette solution ne marche pas (le lecteur veut bien faire une lecture mais plus rien après).
J'ai cru trouver une solution en créant une variable "RFID_read", qui lorsqu'elle est à l'état "HIGH" autorise la lecture d'une puce RFID puis l'arrête lorsqu'une puce est détectée.
Sauf que quand j'ai pris mon oscilloscope (avec une boucle en guise d’antenne), j'ai remarqué que le lecteur RFID émet tout le temps.
Avez vous une solution?
Je vous laisse une version fortement allégée de mon programme pour plus de lisibilité.
il fonctionne ainsi:
Si j’appuie sur le bouton "RFID", la variable "RFID_read" passe à 1 ce qui autorise la lecture d'une puce. Lorsque la puce est lue, la variable "RFID_read" passe à 0
Merci pour votre temps.
//Module RFID
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 51
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
byte nuidPICC[4];// stock l'IUD RFID
boolean RFID_init = LOW;
boolean RFID_read = LOW;
//déclaration Bouton RFID et variables pour sa gestion
const int BP_RFID = A2;
boolean BPState_RFID = 0;
boolean lastBPState_RFID = 0;
void setup()
{
pinMode(BP_RFID, INPUT);
//Serial
Serial.begin(9600);
Serial.println("Ready");
}
void loop()
{
//lecture des BP
BPState_RFID = digitalRead(BP_RFID );
// Gestion du bouton: BP_RFID
if (BPState_RFID != lastBPState_RFID) {
if (BPState_RFID == HIGH) {//Si je viens d'appuyer sur le Bouton RFID (c'est un bouton capacitif donc pas de rebonds)
RFID_read = HIGH;//pour autoriser la lecture d'une puce RFID
}
//mémorise l'état courant du bouton
lastBPState_RFID = BPState_RFID;
}
//Détection d'une puce RFID
if (RFID_read == HIGH){// si j'ai delandé la lecture d'un puce RFID par l'appuis sur le bouton "RFID"
if(RFID_init == LOW){
SPI.begin(); //initialise la liaison SPI pour le lecteur RFID
rfid.PCD_Init(); //initialise le lecteur RFID
RFID_init = HIGH;//l'init est faite et le module RFID est prêt à lire
}
else{//si l'init est déjà faire, alors lire la puce RFID
Serial.println("read");
// Initialisé la boucle si aucun badge n'est présent
if ( !rfid.PICC_IsNewCardPresent())
return;
// Vérifier la présence d'un nouveau badge
if ( !rfid.PICC_ReadCardSerial())
return;
// Afffichage
Serial.println(F("Un badge est détecté"));
// Enregistrer l’ID du badge (4 octets)
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
//copie les nombres de l'IUD dans les bonnes variables
/*
dossier = nuidPICC[3];
pisteDeDebut = nuidPICC[2];
nombreDePages = nuidPICC[1];
typeDeSupport = nuidPICC[0];
selectSourceFolderAndTrack(dossier, pisteDeDebut);// lecture de la première page du livre
*/
// Affichage de l'identifiant
Serial.println(" L'UID du tag est:");
for (byte i = 0; i < 4; i++)
{
Serial.print(nuidPICC[i], DEC);
Serial.print(" ");
}
Serial.println();
RFID_read = LOW;
RFID_init = HIGH;
}
}// la puce RFID est Lue et son identifiant est sauvegardé dans différentes variables.
//FIN
}
Pour info, le programme de base c'est celui çi
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 53
#define RST_PIN 5
//RFID
MFRC522 rfid(SS_PIN, RST_PIN); // Instance of the class
//variables RFID
byte nuidPICC[4];// stock l'IUD RFID
void setup()
{
Serial.begin(9600);
//RFID
// Init SPI bus
SPI.begin();
// Init MFRC522
rfid.PCD_Init();
}
void loop() {
//RFID début
// Initialisé la boucle si aucun badge n'est présent
if ( !rfid.PICC_IsNewCardPresent())
return;
// Vérifier la présence d'un nouveau badge
if ( !rfid.PICC_ReadCardSerial())
return;
// Afffichage
Serial.println(F("Un badge est détecté"));
// Enregistrer l'ID du badge (4 octets)
for (byte i = 0; i < 4; i++) {
nuidPICC[i] = rfid.uid.uidByte[i];
}
delay(500);
// Affichage de l'identifiant
Serial.println(" L'UID du tag est:");
for (byte i = 0; i < 4; i++)
{
Serial.print(nuidPICC[i], DEC);
Serial.print(" ");
}
Serial.println();
// Re-Init RFID
rfid.PICC_HaltA(); // Halt PICC
rfid.PCD_StopCrypto1(); // Stop encryption on PCD
//RFID Fin
//FIN
}