QExtSerialPort + Arduino Problem nach 15 Sekunden

Gast #3269980
Lesenswert?
• ▲
▼
Ich habe gerade ein sehr merkwürdiges Problem, bei dem ich gerne auf die 
fachkundige Hilfe hier zurückgreifen würde:

Ich lese Daten von einem Arduino ein, genauer gesagt verschiedene 
Temperaturwerte und auch Schrittzahlen von einem Motor usw .... dafür 
verwende ich die besagte Library in QT 5. Im wesentlichen stöpsle ich 
alle Daten zu einem String zusammen, den ich dann per Serial.print() an 
die GUI schicke, dort wird es QExtSerialPort abgefangen und eingelesen. 
Jedoch funktioniert das nicht fehlerfrei - zumindest nicht über eine 
längere Zeit.

Rufe ich mit dem seriellen Monitor der Arduino Umgebung die Daten ab, 
dann passt alles. Lese ich sie aber mit der GUI aus, die ich in QT 
geschrieben habe, so geht alles nur etwa 15 Sekunden lang gut - dann 
fängt er an Daten zu schlucken. Ich habe nun schon den String im Arduino 
nicht mehr "erzeugt" sondern einfach einen "123456789abcdefghij" 
übertragen - Monitor: alles cool. GUI: Nur die ersten Sekunden ok.

Ich versuche mal einige essenzielle Codefragmente herauszugreifen, damit 
das nicht in einer Leseorgie endet:

Arduino Code:
1
  string_outData = "A23.0000&-5.000&0.000X523.0000&-1.000&9.000Y";
2
  Serial.print(string_outData);

QT Code für Connect:
1
foreach (QextPortInfo info, QextSerialEnumerator::getPorts()){
2
        if (info.portName != 0) {
3
        ui->portBox->addItem(info.portName);
4
        }
5
    }
6

7
    timer = new QTimer(this);
8
    timer->setInterval(40);
9

10
    port = new QextSerialPort;
11
    port->setPortName(ui->portBox->currentText());
12
    port->setQueryMode(QextSerialPort::EventDriven);
13
    port->setBaudRate(BAUD9600);
14
    port->setFlowControl(FLOW_OFF);
15
    port->setParity(PAR_NONE);
16
    port->setDataBits(DATA_8);
17
    port->setStopBits(STOP_1);
18

19
    connect(port, SIGNAL(readyRead()), this, SLOT(onReadyRead()));
20

21
    enumerator = new QextSerialEnumerator(this);
22
    enumerator->setUpNotifications();
23

24
    connect(enumerator, SIGNAL(deviceDiscovered(QextPortInfo)), SLOT(onPortAddedOrRemoved()));
25
    connect(enumerator, SIGNAL(deviceRemoved(QextPortInfo)), SLOT(onPortAddedOrRemoved()));
26
}
QT Code für ReadyRead:
1
void MainWindow::onReadyRead()
2
{
3
    if (port->bytesAvailable()) {
4

5
        ui->recv_text->moveCursor(QTextCursor::End);
6
        ui->recv_text->insertPlainText(QString::fromLatin1(port->readAll()));
7

8
        // Einkommenden Datenstring verarbeiten
9
        //QString incoming_string = QString::fromLatin1(port->readAll());

Den einkommenden Datenstrom hätte ich am liebsten als String eigentlich 
zum weiterverarbeiten (wollte da dann mit string.split() wieder alles in 
die einzelnen Werte zerlegen ...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.