我正在使用Arduino Uno和adaFruit PN532主板。目标是能够创建目前在NFC Shield范围内的MiFare卡列表。
我无法找出编写此逻辑的最佳方法,因为主板似乎每个循环只能检测到一张卡。
我可以在电路板上放置两张卡,它们可以看到它们,但每个循环只有一张。那么我将如何创建当前范围内的当前列表
我的循环:
void loop()
{
Serial.println("--------------------Loop begin-------------------");
uint8_t success;
uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 }; // Buffer to store the returned UID
uint8_t uidLength; // Length of the UID (4 or 7 bytes depending on ISO14443A card type)
uint8_t index =0;
// Wait for an ISO14443A type cards (Mifare, etc.). When one is found
// 'uid' will be populated with the UID, and uidLength will indicate
// if the uid is 4 bytes (Mifare Classic) or 7 bytes (Mifare Ultralight)
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
// Display some basic information about the card
Serial.println("Found an ISO14443A card");
Serial.print(" UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
Serial.print(" UID Value: ");
nfc.PrintHex(uid, uidLength);
Serial.println("");
}
Serial.println("************************Loop END*********************");
}
以下是两张牌在范围内的串口显示器:
--------------------循环开始-------------------
找到ISO14443A卡
UID长度:4个字节
UID值:0x13 0x99 0x1C 0xD4**********************循环结束******************* < /强>
--------------------循环开始-------------------
找到ISO14443A卡
UID长度:4个字节
UID值:0x13 0x34 0x27 0xD4**********************循环结束******************* < /强>
答案 0 :(得分:0)
你需要一些状态(类似于带有ID和长度字段的结构数组) 的循环来存储你的(可能有多个)UID。查看code for readPassiveTargetID我认为如果有多个卡ID,则可能会有点随机返回哪个卡ID。
我想你需要继续读取ID,检查数组以查看你之前是否已经看过它,如果没有则存储它。然后经过一段时间(或阵列溢出或其他触发器),您可以打印出“最近”看到的ID,并将阵列重置为空(例如,通过清除长度字段)