首页 > 解决方案 > Arduino通过串口打印字符串

问题描述

当我注意到arduino将数据打印到“控制台”时,我正在编码一段时间,它完美地打印它,但是,当我尝试复制它时,只复制了字符串的一部分。就像有看不见的字符。

我无法粘贴输出,因为当我尝试复制它时,它不会完整复制。

我试图做的是从 Mifare 卡获取数据并制作 json 格式以将其打印到控制台以与其他程序通信。一切顺利,直到它打印数据。

Arduino代码

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    return false;
  }

  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK) {
    return false;
  }

  String user;
  for (char c : buffer1) {
    if (c != '^') {
      user += c;
    } else break;
  }

  block = 2;
  len = 18;

  status = mfrc522.PCD_Authenticate(MFRC522::PICC_CMD_MF_AUTH_KEY_B, block, &key, &(mfrc522.uid));
  if (status != MFRC522::STATUS_OK) {
    return false;
  }

  status = mfrc522.MIFARE_Read(block, buffer1, &len);
  if (status != MFRC522::STATUS_OK) {
    return false;
  }

  String unicID;
  for (char c : buffer1) {
    if (c != '^') {
      unicID += c;
    } else break;
  }

  String dataSend = "{\"u\":\"" + String(user) + "\",\"i\":\"" + String(unicID) + "\"}º";
  Serial.println (dataSend);
  dataSend.replace("\n","");dataSend.replace("\t","");dataSend.replace("\r","");dataSend.replace(" ","");
  Serial.println (dataSend);


  if (dataSend.length() > 20) {
    for (int x = 0; x  < ((dataSend.length() / 20) +3); x++) {
      Serial.println(String(x*20) + " ---- "+ String((x+1)*20));

      Serial.println(String(dataSend.substring(x*20,(x+1)*20)));
      delay(100);
    }
  } else {
    Serial.println( dataSend);
  }
  mfrc522.PICC_HaltA();
  mfrc522.PCD_StopCrypto1();

输出应该是每 20 个字符拆分一次:

{"u":"teoDinqtepfhtpefhtpe4b","i":"qwertyuiopasdfgBp"}º

但我得到:

0 ---- 20
{"u":"teoDinqtepfhtp
20 ---- 40
e
40 ---- 60
pasdfg
60 ---- 80

80 ---- 100

就像有神奇的人物或类似的东西。这是一张图片,因为我无法在尝试格式化它以解决问题之后或之前复制第一个完整输出。

控制台输出

标签: c++stringarduino

解决方案


Mifare 卡有 16 个字节 x 块的限制,您不能在 0、3、6 等受保护的块上写入。错误是我写的是 17 个字节而不是 16 个字节,并且返回的不可见/错误字符可以'不显示


推荐阅读