• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[Qt] [Arduino] Rozkodowywanie danych z portu szeregowego

Object Storage Arubacloud
0 głosów
184 wizyt
pytanie zadane 11 maja 2019 w C i C++ przez albert828 Nowicjusz (200 p.)

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";
}

 

komentarz 11 maja 2019 przez j23 Mędrzec (194,920 p.)
edycja 11 maja 2019 przez j23

Nie rozumiem jednej rzeczy. Po co jest ta wewnętrzna pętla, skoro przed nią wywołujesz readLine (zakładam, że czyta całą wysłaną linię)?

 

Wydaje mi się, że powinieneś użyć QString::fromLocal8Bit zamiast QString::fromUtf8 (chyba że nadajesz w UTF-8).

 

Ten strlen trochę bez sensu jest, bo String ma metodę length :)

komentarz 11 maja 2019 przez albert828 Nowicjusz (200 p.)
edycja 11 maja 2019 przez albert828

Co do wewnętrznej pętli teoretycznie masz rację praktycznie bez tego nie działa (ucina wiadomości) nie doszedłem dlaczego tak jest :).

Co do kodowania masz rację rzecz w tym że QString nie zawiera metody fromAscii() (dałem jako przykładowe Utf-8). Testowałem wcześniej QString::fromLocal8Bit ale też otrzymuję taką sieczkę że nie jestem w stanie zlokalizować znaków przed wartościami. Dlatego liczę na to że coś w tym temacie pomożecie.

Faktycznie z length masz rację :)

Problem rozwiązany. Głupi błąd w Qt ustawiłem bit parzystości a w Arduino już nie. Co ciekawe dla 

Serial.println("Test");

działało poprawnie i to mnie zmyliło.Dzięki j23 za chęć pomocy! :)

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
2 odpowiedzi 877 wizyt
0 głosów
0 odpowiedzi 122 wizyt
0 głosów
1 odpowiedź 451 wizyt
pytanie zadane 7 kwietnia 2016 w Mikrokontrolery przez sofnir Gaduła (4,690 p.)

92,568 zapytań

141,422 odpowiedzi

319,638 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...