Arduino : RFID RC522 Arrêter la lecture de la carte plusieurs fois
J'ai juste eu la main sur le RC522 carte de RFID pour l'arduino et je travaille à l'aide de croquis.
MiFare RFID-RC522
Ce que je suis coincé à l'est de comprendre comment mettre en pause l'esquisse alors que la carte est en cours de lecture de sorte qu'il n'est lu qu'une seule fois. Au moment où la carte est connectée à la RDIF lecteur de l'esquisse gardera en boucle et lire la carte à chaque fois.
Il y a un délai qui peut être réglé, mais finira par lire la carte à nouveau si il est connecté plus longtemps que le délai.
Ce que je voudrais, c'est être capable de dire tout il y a une connexion avec la carte, lire la carte d'identité qu'une seule fois puis continuer l'esquisse de la carte de connexion est interrompue.
C'est le principal segment d'esquisse:
void loop()
{
uchar status;
uchar str[MAX_LEN];
//Search card, return card types
status = MFRC522_Request(PICC_REQIDL, str);
if (status != MI_OK)
{
return;
}
//Show card type
ShowCardType(str);
//Prevent conflict, return the 4 bytes Serial number of the card
status = MFRC522_Anticoll(str);
//str[0..3]: serial number of the card
//str[4]: XOR checksum of the SN.
if (status == MI_OK)
{
Serial.print("The card's number is: ");
memcpy(serNum, str, 5);
ShowCardID(serNum);
//Check people associated with card ID
uchar* id = serNum;
if (id[0] == 0x4B && id[1] == 0xE6 && id[2] == 0xD1 && id[3] == 0x3B) {
Serial.println("Hello Mary!");
}
else if (id[0] == 0x3B && id[1] == 0xE6 && id[2] == 0xD1 && id[3] == 0x3B) {
Serial.println("Hello Greg!");
}
else{
Serial.println("Hello unkown guy!");
}
}
MFRC522_Halt(); //command the card into sleep mode
delay(2000);
}
Merci Les Gars.
Vous devez vous connecter pour publier un commentaire.
J'ai pu travailler cette un en regardant les valeurs de retour de
MFRC522_Request(PICC_REQIDL, str)
.J'ai créé RFID_status comme un int et a également créé RFID_read comme un int et la valeur 0.
J'ai ensuite utilisé RFID_status de tester pour voir si il y avait un actif de connexion de la carte.
Si oui et RFID_read était toujours de 0 alors lu la carte et définir RFID_read à 1. De cette façon, dans la prochaine boucle de la carte ne sera pas lu.
Une fois que la carte est enlevé RFID_status sera lu comme 0 (Pas de connexion) et RFID_read seront remis à 0.
NB: Il y a beaucoup de code dans ce sketch que j'ai pris. J'ai seulement compris le vide, la boucle et les deux variables globales que j'ai créé.
Le dessin original peut être trouvé ici: MiFare RFID-RC522 Esquisse
J'ai fait comme ceci:
Fondamentalement, je suis juste en comptant combien de fois il n'y a pas de carte dans une rangée, lorsque la carte se trouve sur le lecteur,
noCardCount
restera faible. Seulement si un grand nombre de fois dans une rangée aucune carte n'a été détecté, il va lire à nouveau.