Cześć,
Wysyłam sobie dane z Arduino przez port szeregowy i odbieram je w aplikacji napisanej w Qt. Problem mam taki że wysyłam ciąg w postaci "H123 V2 L63 V2413 I23 CRC2a" Czyli znak, wartość spacja itd. I mam problem z odebraniem tych danych tak aby nie otrzymywać sieczki. Przykładowy odbiór: "H&?? j\u0002I&\u001AICL?H".
Czyli generalnie mam problem z rozkodowywaniem. Nie mogę sobie ustalić na sztywno konwersji bo rozmiar stringu się zmienia (inna długość gdy np mam H2 a inna gdy H123). Macie jakieś propozycje jak to rozwiązać?
Kod arduino:
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);
}
Kod 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";
}