Tags MFRC522多个读卡器标签移除检查
硬/软件综述Tags MFRC522多个读卡器标签移除检查,tags,nfc,Tags,Nfc,硬/软件综述 OS version: Windows Home Arduino IDE version: 1.8.13 MFRC522 Library version: 1.5.1 Arduino device: nano MFRC522 device: joy-it 我尝试使用MFRC522读取NTag216标签并打印序列号,如果读取的标签与我已知的标签相同。 如果我只是尝试跟踪,当读取新标记时,它工作正常。 如果我试图跟踪丢失的标签,就会出现问题。 我是否缺少读卡器的检查功能,或者我的编码
OS version: Windows Home
Arduino IDE version: 1.8.13
MFRC522 Library version: 1.5.1
Arduino device: nano
MFRC522 device: joy-it
我尝试使用MFRC522读取NTag216标签并打印序列号,如果读取的标签与我已知的标签相同。
如果我只是尝试跟踪,当读取新标记时,它工作正常。
如果我试图跟踪丢失的标签,就会出现问题。
我是否缺少读卡器的检查功能,或者我的编码有其他问题
//Relevant Code:
#include <SPI.h>
#include <MFRC522.h>
#define RST_PIN 9
#define SS_1_PIN 10 //SS pin for reader 1
#define SS_2_PIN 8 //SS pin for reader 2
#define NR_OF_READERS 2
#define SIZE(array) sizeof(array)/sizeof(array[0])
struct Tag {
byte uuid[7];
char name[16];
unsigned int battery_size;
};
struct Tag database[ ] { //my known id´s
{{0x04, 0x41,0xC1,0xD2,0x2F,0x66,0x81}, "5", 0},{{0x04,0x30,0xDB,0x02,0x2B,0x5E,0x80},"6",1},{{0x04, 0x3A,0xD6,0x02,0x2B,0x5E,0x80},"7",2}
};
struct Tag* lookup(byte* uuid) {
for(unsigned int i=0; i<SIZE(database); i++) {
if(memcmp(database[i].uuid, uuid, 7) == 0) {
return &database[i];
}
}
return NULL;
}
char buffer[32];
byte ssPins[ ] = {SS_1_PIN, SS_2_PIN};
MFRC522 mfrc522[NR_OF_READERS]; // Create MFRC522 instance.
void setup() {
Serial.begin(9600); // Initialize serial communications with the PC
SPI.begin(); // Init SPI bus
for (uint8_t reader = 0; reader < NR_OF_READERS; reader++) {
mfrc522[reader].PCD_Init(ssPins[reader], RST_PIN); // Init each MFRC522 card
Serial.print(F("Reader "));
Serial.print(reader);
Serial.print(F(": "));
mfrc522[reader].PCD_DumpVersionToSerial();
}
}
void loop() {
bool cardremoved;
for(uint8_t reader=0;reader<NR_OF_READERS;reader++){
if(mfrc522[reader].PICC_IsNewCardPresent() && mfrc522[reader].PICC_ReadCardSerial()){
struct Tag* match = lookup(mfrc522[reader].uid.uidByte);
if(match == NULL) {
Serial.println ("no matching ID");
return;
}else {
Serial.print(match->name);
Serial.print("#1#1\n");
}
/****************************** my problem occures down here***********************************************/
}else if(!mfrc522[reader].PICC_IsNewCardPresent()){
struct Tag* match = lookup(mfrc522[reader].uid.uidByte);
if(match == NULL) {
cardremoved=true;
}else {
cardremoved=false;
}
if(cardremoved){
Serial.println(cardremoved +" "+reader);
}
}
// Halt PICC
mfrc522[reader].PICC_HaltA();
// Stop encryption on PCD
mfrc522[reader].PCD_StopCrypto1();
}
}
//相关代码:
#包括
#包括
#定义RST_引脚9
#定义读卡器1的SS_1_引脚10//SS引脚
#定义读卡器2的SS_2_引脚8//SS引脚
#定义读取器的数量2
#定义大小(数组)sizeof(数组)/sizeof(数组[0])
结构标签{
字节uuid[7];
字符名[16];
未签名的整数电池大小;
};
结构标记数据库[]{//我的已知id
{0x04,0x41,0xC1,0xD2,0x2F,0x66,0x81},“5”,0},{0x04,0x30,0xDB,0x02,0x2B,0x5E,0x80},“6”,1},{0x04,0x3A,0xD6,0x02,0x2B,0x5E,0x80},“7”,2}
};
结构标记*查找(字节*uuid){
对于(无符号整数i=0;i