我只是在存在RFID标签时才尝试打印一次,而只在它被带走时打印一次 . 当我运行一个完全识别任何标签的脚本时,这可以正常工作......如下所示:
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
bool CurrentCardPresentStatus = false; // current state of the button
bool lastCardPresentStatus = false; // previous state of the button
void setup() {
Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
}
void loop(){
CurrentCardPresentStatus = mfrc522.PICC_IsNewCardPresent();
if (CurrentCardPresentStatus != lastCardPresentStatus) {
if (CurrentCardPresentStatus == true) {
Serial.println("CARD PRESENT");
} else {
Serial.println("NO CARD");
}
}
lastCardPresentStatus = CurrentCardPresentStatus;
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD
}
但是当我尝试使用存储标签数组做同样的事情时,我的问题就出现了 . 我需要将 mfrc522.PICC_ReadCardSerial();
添加到函数 ObjectTagChecker()
才能访问完整的UID . 这为以前的简单检查方案带来了问题 . 基本上我现在要么当卡片被放在阅读器上时要同时得到"CARD DETECTED"和"NO CARD PRESENT",或者除了我想要的那个之外的其他所有变体 . 有人能从下面的代码告诉我哪里出错了?非常感谢 :)
#include <SPI.h>
#include <MFRC522.h>
#define SS_PIN 10
#define RST_PIN 9
MFRC522 mfrc522(SS_PIN, RST_PIN); // Create MFRC522 instance.
char* instrumentUIDs[] = {"E6 7A 78 89", "67 10 DB 2B", "54 8F DA 2B", "84 C2 BE 1E", "A7 0B 75 F2"};
bool CurrentCardPresentStatus = false; // current state of the button
bool lastCardPresentStatus = false; // previous state of the button
//******************************************************************************
void setup() {
Serial.begin(9600); // Initiate a serial communication
SPI.begin(); // Initiate SPI bus
mfrc522.PCD_Init(); // Initiate MFRC522
}
//******************************************************************************
void loop(){
CurrentCardPresentStatus = mfrc522.PICC_IsNewCardPresent();
if (CurrentCardPresentStatus != lastCardPresentStatus) {
if (CurrentCardPresentStatus == true) {
ObjectTagChecker();
} else {
Serial.println("NO CARD PRESENT");
}
}
lastCardPresentStatus = CurrentCardPresentStatus;
//Serial.print(mfrc522.uid.size);
mfrc522.PICC_HaltA(); // Halt PICC
mfrc522.PCD_StopCrypto1(); // Stop encryption on PCD
}
//******************************************************************************
void ObjectTagChecker() {
mfrc522.PICC_ReadCardSerial();
String content= "";
for (byte i = 0; i < mfrc522.uid.size; i++) {
content.concat(String(mfrc522.uid.uidByte[i] < 0x10 ? " 0" : " "));
content.concat(String(mfrc522.uid.uidByte[i], HEX));
}
content.toUpperCase();
for (int i = 0; i < (sizeof(instrumentUIDs)/2); i++) {
if (content.substring(1) == instrumentUIDs[i]) {
Serial.println("CARD DETECTED");
}
}
}
提前谢谢了!