Декодирование данных из последовательного порта (строка с целыми числами) - PullRequest
0 голосов
/ 11 мая 2019

Я посылаю строку из Arduino на ПК, используя последовательную связь. Формат сообщения включает символ, значение и пробел (разделяющие данные). Пример сообщения: "H123 V2 L63 V2413 I23 CRC2a". У меня есть проблема с декодированием этого сообщения в Qt, потому что, когда я использую, например, Utf-8, он преобразует целые числа в символы (в упрощенном виде), и я получаю что-то подобное: "H&?? j\u0002I&\u001AICL?H". Длина сообщения не постоянна (разный размер, например, H12 и H123), поэтому я не могу использовать заранее определенную позицию для приведения. У вас есть идеи, как правильно декодировать сообщение?

Код 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";
}
...