ZBLOG

void NEC_VOID() { uint8_t success; uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 ,0}; uint8_t uidLength; success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength); if (success) { Serial.println("Found an NFC...

根据你提供的代码,有几个问题需要注意和修正:

  1. 请确保在程序开头正确引入PN532库,例如:#include <PN532.h>

  2. 确认在程序中正确初始化NFC模块,包括设置通信接口和开始模块。

  3. 在这行代码 if (uidLength == sizeof(targetUid) && (UID) == 0) 中,(UID) 部分需要修改为 memcmp(uid, targetUid, uidLength) == 0。因为 (UID) 是无效的语法。

  4. 在匹配成功后点亮LED之前,先将LED引脚设置为输出模式,可以在 setup() 函数中添加 pinMode(LED_PIN, OUTPUT); 进行初始化。

  5. 可以使用串口监视器来调试代码并查看打印信息。确保串口波特率与你的代码设置一致(如 Serial.begin(9600);)。

修正后的代码如下所示:

#include <Wire.h>
#include <Adafruit_PN532.h>

#define SDA_PIN   4
#define SCL_PIN   5
#define LED_PIN   13

Adafruit_PN532 nfc(SDA_PIN, SCL_PIN);

void setup(void) {
    Serial.begin(9600);
    pinMode(LED_PIN, OUTPUT);
  
    nfc.begin();
    uint32_t versiondata = nfc.getFirmwareVersion();
    if (!versiondata) {
        Serial.print("Didn't find PN53x board");
        while (1); // Halt on failure
    }
  
    nfc.SAMConfig();
    Serial.println("Waiting for an NFC card ...");
}

void loop(void) {
    uint8_t success;
    uint8_t uid[] = { 0, 0, 0, 0, 0, 0, 0 ,0};
    uint8_t uidLength;

    success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);

    if (success) {
        Serial.println("Found an NFC card!");
        Serial.print("UID Length: ");Serial.print(uidLength, DEC);Serial.println(" bytes");
        Serial.print("UID Value: ");
        for (uint8_t i=0; i < uidLength; i++) {
            Serial.print(" 0x");Serial.print(uid[i], HEX);
        }
        Serial.println("");
        
        uint8_t targetUid[] = {3 , 3, 12, 9, 15, 5, 0, 3}; // 示例UID  
        
        if (uidLength == sizeof(targetUid) && memcmp(uid, targetUid, uidLength) == 0)
         {
            // 匹配成功,点亮LED
            digitalWrite(LED_PIN, HIGH);
            Serial.println("LED is ON");
            delay(2000); // 持续点亮LED一段时间
            digitalWrite(LED_PIN, LOW); // 熄灭LED
        } else {
            Serial.println("UID does not match the target UID");
        }

        //无论是否匹配,都重置NFC模块以准备下一次读取
        nfc.resetHardware();
        delay(100);
    }
    delay(1000); // 等待一段时间再次检测 
}

请确保你已经正确引入相关库,并将代码中的引脚设置(如SDA_PIN,SCL_PIN,LED_PIN)与实际硬件连接相匹配。另外,也可以根据需要修改串口波特率和其他参数。希望这能帮助到你解决问题!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=17558

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?