我只是在存在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");                    
    } 
  }  
}

提前谢谢了!