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.