当前位置: 首页 > 知识库问答 >
问题:

从串行端口解码数据(带整数的字符串)

欧桐
2023-03-14

我发送字符串从Arduino到PC使用串行通信。消息的格式包括字符、值和空格(分隔数据)。示例消息:"H123 V2 L63 V2413 I23 CRC2a"。我在Qt中解码这条消息有问题,因为当我使用例如Utf-8解码它时,我将整数转换为字符(以简化的方式),并收到类似的东西:"H

Arduino代码:

uint8_t H = 0, V = 0, L = 0, I = 0, CRC = 0;
String data;
void loop() {
  ++H; ++V; ++L; ++I;
  data = String("H");
  data += String(H, DEC);
  data += String(" V");
  data += String(V, DEC);
  data += String(" L");
  data += String(L, DEC);
  data += String(" I");
  data += String(I, DEC);
  CRC = CRC8(data.c_str(), strlen(data.c_str()));
  data += String(" CRC");
  data += String(CRC, HEX);
  Serial.println(data);
  delay(1000);
}

Qt代码:


while(serial.isOpen())
{
  QByteArray data;

  if (serial.waitForReadyRead(1000))
  {
    data = serial.readLine();
    while (serial.waitForReadyRead(100))
    {
        data += serial.readAll();
    }
    QString response = QString::fromUtf8(data);
    qDebug() << "Data " << response << endl;
  }
  else
    qDebug() << "Timeout";
}

共有1个答案

林鹭洋
2023-03-14

问题是使用UTF-8解码,而Arduino只发送1字节的ASCII字符。因此,如前所述,使用local8bit的

这样地:

while(serial.isOpen())
{
  QByteArray data;

  if (serial.waitForReadyRead(1000))
  {
    data = serial.readLine();
    while (serial.waitForReadyRead(100))
    {
        data += serial.readAll();
    }
    QString response = QString::fromLocal8Bit(data);
    qDebug() << "Data " << response << endl;
  }
  else
    qDebug() << "Timeout";
}

 类似资料:
  • 我正在写一个简单的井字游戏,需要在轮到他们的时候接受用户输入。玩家应该简单地提供一组坐标来放置他们的令牌(1,1)到(3,3)。我应该能够接受输入为“2 1”或“2,1”或“2,1”。所以我需要能够获取他们的字符串输入并提取两个数字中的每一个,而不管分隔符如何,并使用它们将他们的令牌分配给3x3数组中的指定单元格。 主要的问题是只能利用我们已经学过的东西(这是Java的第一节)。这是构建Java程

  • 问题内容: 我有一个Java程序,必须读取Arduino发送的信息。我从这里获取了Java代码。现在,我不太了解它是如何工作的,但是我尝试对其进行修改,并且得到了以下信息: 我创建一个对象串行COM口,我需要在主程序,然后我使用和当我需要它。 效果很好,Arduino获取数据并将其显示在LCD显示屏中。问题是。程序运行时,它会不断从串行端口读取数据(大约每40毫秒一次),但这并不意味着Arduin

  • 问题内容: 我想知道是否有一种方法可以通过PHP读取我的串行端口-可行:-) 在练习Arduino技能时,我开发了一个简单的LED ON / OFF草图。通过在串行监视器中 打开 或 关闭 它可以工作。 下一步,我整理了一个网页,充当GUI界面,以单击链接并执行上面的打开和关闭功能。该基于Web的GUI可通过PHP使用。我正在使用PHP SERIAL 类与Arduino使用的串行端口进行交互。 问

  • 我想知道是否有一种方法可以通过PHP来完成对串行端口的读取——有效:—— 在练习Arduino技能时,我设计了一个简单的LED开关示意图。它通过在串行监视器中输入on或off来工作。 下一步,我把一个网页放在一起,作为一个GUI界面,点击一个链接并执行上面的开关功能。这个基于网络的GUI通过PHP工作。我使用PHP串行类与Arduino使用的串行端口进行交互。 问题是我需要找到一种从串口获取反馈的

  • 我是Python的新手,我试图使用Matplotlib从我的PC的串行端口绘制一些数据,这些数据是从外部DVM(数字电压表)获取的,数据格式很简单,如:10.01 9.97 9.95 10.02......我可以使用Matplotlib制作一些静态图形或图表,但我不知道如何在实时模式下绘制数据图表。我只是想看到一个折线图不断更新,x轴是不需要的。我已经通过几个代码(代码中的变量v)获得了串行端口数

  • 问题内容: 我想将Json的压缩gzip上传到Google Storage。 我有以下代码: 该是返回的Json换行符分隔的功能。 运行此代码将给出: 在Python文档说,格式是:我不知道我把它理解为不存在如何使用它的例子。 我也尝试过 这给出了: 我正在运行Python 3.5 问题答案: 您没有正确使用该功能。检查一下: 你可以试试: 是该函数的参数,而您正在该函数之外使用它。