Problem Arduino & QT Creator

Hello everyone,
I hope I'm in the right place. I'm currently trying to create a project with the Elegoo Uno R3 and QT Creator with which I can display the time interval between two acquisitions using the TCRT5000 sensor (infrared sensor). My Arduino code works great, the serial monitor shows what it should. Attached is the code:

const int lichtschrankePin = A0; // Der analoge Pin, an dem die Lichtschranke angeschlossen ist
const int schwellenwertMin = 200; // Minimaler Schwellenwert für den Lichtschrankenbereich (in cm)
const int schwellenwertMax = 700; // Maximaler Schwellenwert für den Lichtschrankenbereich (in cm)

unsigned long vorherigeZeit = 0;

void setup() {
  Serial.begin(9600); // Start der seriellen Kommunikation
  pinMode(lichtschrankePin, INPUT); // Der Pin der Lichtschranke wird als Eingang festgelegt
}

void loop() {
  // Lesen Sie den analogen Wert der Lichtschranke
  int lichtschrankenWert = analogRead(lichtschrankePin);

  // Überprüfen Sie, ob der gemessene Wert im gewünschten Bereich liegt
  if (lichtschrankenWert >= schwellenwertMin && lichtschrankenWert <= schwellenwertMax) {
    unsigned long aktuelleZeit = millis();
    unsigned long zeitunterschied = aktuelleZeit - vorherigeZeit;

    // Ausgabe der Zeitdifferenz über die serielle Schnittstelle
   // Serial.print("Zeitunterschied zwischen zwei Messungen (5-7 cm): ");

Serial.println(zeitunterschied);
Serial.flush();

    //Serial.println(" ms");
    delay(500);

    // Aktualisieren Sie die vorherige Zeit für die nächste Messung
    vorherigeZeit = aktuelleZeit;
  }

  // Fügen Sie eine kurze Verzögerung hinzu, um zu verhindern, dass zu viele Messungen durchgeführt werden
  delay(10);
}

The QT Creator is successfully connected to the Arduino, it also receives the data, but it is only displayed piecemeal, so unfortunately I cannot process the values. Attached is the code:

MainWindow::~MainWindow()
{
    if (arduino->isOpen()) {
        arduino->close();
    }
    delete ui;
}
void MainWindow::readData()
{
    QByteArray data;
   // qDebug() << "Empfangene Daten im Puffer: " << data;
    while (arduino->bytesAvailable() > 0) {
        data += arduino->readAll();
    }

    QString zeitunterschiedStr = QString(data).trimmed();
    bool ok;
    unsigned long zeitunterschied = zeitunterschiedStr.toULong(&ok);

    if (ok) {
        // Hier können Sie die Logik für den empfangenen Zeitunterschied einfügen
        qDebug() << "Empfangener Zeitunterschied: " << zeitunterschied << " ms";
    } else {
        qDebug() << "Fehler beim Konvertieren der empfangenen Daten in unsigned long";
    }
}

Does anyone have an idea why the values ​​are transferred differently than in the Arduino's serial monitor?

I would be happy if I got an answer.

best regards,
Sibbi

Edit: // Here is some console-output in QT Creator:

Fehler beim Konvertieren der empfangenen Daten in unsigned long
Empfangener Zeitunterschied:  515  ms
Fehler beim Konvertieren der empfangenen Daten in unsigned long
Empfangener Zeitunterschied:  3  ms
Empfangener Zeitunterschied:  509  ms
Fehler beim Konvertieren der empfangenen Daten in unsigned long
Empfangener Zeitunterschied:  69  ms
Empfangener Zeitunterschied:  8  ms

515ms and 509ms sounds realistic, anything under 500ms cannot be correct due to the delay.

Hi
As I see in the code, the problem is that you displaying an incomplete data.

In arduino code you use println() to send data, so you values are separated by newline.
Than on PC you have wait until newline does received and display data only after that.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.