我目前正在开展一个项目,使用 Arduino Nano 板和 PN5180 读取器从传送带上的盒子中读取 RFID 标签。该项目的性质要求快速高效地读取和处理 RFID 标签。但是,我面临着程序速度的问题,可能是由于使用的库造成的。我目前正在使用 PN5180-NFC 的 Arduino ESP-32 库,特别是 ATrappmann 的 GitHub 上的 tueddy 分支。虽然当 RFID 标签在传送带上移动速度较慢时,该程序表现良好,但它很难跟上所需的速度,从而导致大量读取失败。
这个挑战尤其紧迫,因为我无法控制传送带速度,因此优化代码以实现更快、更可靠的 RFID 标签处理至关重要。在使用 PN5180 阅读器之前,我使用带有不同库的 RC522 阅读器,并使其标签读取成功率达到 100%。然而,我需要 PN5180 来扩展范围。如果社区中的任何人有 Arduino 的经验,或者您可以提供提高代码效率的指导,我将非常感谢您的见解。
预先感谢您阅读这篇文章
代码如下:
#include <PN5180.h>
#include <PN5180ISO14443.h>
#define PN5180_NSS 10
#define PN5180_BUSY 9
#define PN5180_RST 7
PN5180ISO14443 nfc14443(PN5180_NSS, PN5180_BUSY, PN5180_RST);
uint8_t previousUid[10]; // Initialize with zeros
void setup() {
Serial.begin(115200);
nfc14443.begin();
nfc14443.reset();
uint8_t productVersion[2];
nfc14443.readEEprom(PRODUCT_VERSION, productVersion, sizeof(productVersion));
uint8_t firmwareVersion[2];
nfc14443.readEEprom(FIRMWARE_VERSION, firmwareVersion, sizeof(firmwareVersion));
uint8_t eepromVersion[2];
nfc14443.readEEprom(EEPROM_VERSION, eepromVersion, sizeof(eepromVersion));
nfc14443.setupRF();
}
int count;
uint8_t uidLength;
uint8_t uid[10];
void loop() {
nfc14443.reset();
nfc14443.setupRF();
if (!nfc14443.isCardPresent()) {
return;
}
uidLength = nfc14443.readCardSerial(uid);
Serial.println(uidLength);
if (memcmp(uid, previousUid, uidLength) == 0) {
return;
}
if (uidLength > 0) {
printHEX(uid, uidLength);
// Update the previous UID
memcpy(previousUid, uid, uidLength);
return;
}
}
// Routine to dump a byte array as a continuous HEXimal number to Serial.
void printHEX(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i], HEX);
Serial.print(":");
}
Serial.println("");
}
我使用相同的库和 iso15693 标签。我无法阅读不同的标签。有时,库会返回前一个读取标签的值。这不仅仅是误读,它提取了前一个标签的确切 ID。每 20-100 次读取就会发生一次,但它确实发生了。有谁知道这怎么可能吗?