无法检索添加到 1k Mifare Classic 标签的 390 个字符的文本记录

问题描述

我在 1k mifare Classic 卡上添加一个 390 个字符长的文本记录,我可以写 它成功了,但读取时记录为空。一世 将 NDEF 库与 PN532 和 Ardunio uno 一起使用。

我的代码

#include <Wire.h>
#include <PN532_I2C.h>
#include <PN532.h>
#include <NfcAdapter.h>

PN532_I2C pn532_i2c(Wire);
NfcAdapter nfc = NfcAdapter(pn532_i2c);

void setup()
{
Serial.begin(115200);
Serial.println("Serial Start");
nfc.begin();
Serial.println("NFC Start");
}

void loop()
{
if (nfc.tagPresent()) {
NfcTag tag = nfc.read();
tag.print();
}
if (nfc.tagPresent()) {
NdefMessage message = NdefMessage();
message.addTextRecord("denemedenemedenemedenemedenemedenemedenemedenemedenemedenemedenemedenemedenemedenemeden");

    bool   success = nfc.write(message);
    if (success)
    {
        Serial.println("Write Success");
    }
    else
    {
        Serial.println("Error");
    }
}
}

我使用了 here 所示的示例,但它不起作用。

解决方法

您将文本“记录”添加到标签中的代码是正确的。然而,从标签中读取的消息负载却不是。到达“记录”需要更多时间。 nfc.read() 返回一个标签对象,该对象由一个消息对象组成,该对象可以由多条记录组成,并且在每条记录中,它具有有效负载长度和有效负载(即您添加的文本节点),需要进行一些解析获取您写入其中的数据。

请注意,数据存储时带有前缀,表示用于记录编码的字符集,我添加了丢弃前缀的代码,记录存储在byte中,需要强制转换为{ {1}} 在 char 之前。

Serial.print()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...