Ich möchte einen Timeout-Mechanismus so implementieren, dass, wenn das Arduino den Befehl nicht innerhalb einer Sekunde liest, es zu einem Timeout kommt und der neue Befehl verworfen wird und das Programm gut läuft. Aber jetzt hängt das Programm, wenn ein neuer Befehl während der Ausführung des alten gesendet wird.Serial Communication Timeout in QT mit Arduino
Dies ist der Timeout-Abschnitt meines Code:
QByteArray requestData = myRequest.toLocal8Bit();
serial.write(requestData);
if (serial.waitForBytesWritten(waitTime)) {
if (serial.waitForReadyRead(myWaitTimeout)) {
QByteArray responseData = serial.readAll();
while (serial.waitForReadyRead(10))
responseData += serial.readAll();
QString response(responseData);
emit this->response(response);
} else {
emit timeout(tr("Wait Read Request Timed Out %1")
.arg(QTime::currentTime().toString()));
}
} else {
emit timeout(tr("Wait Write Request Timed Out %1")
.arg(QTime::currentTime().toString()));
}
Das timeout
Signal an einen Schlitz verbunden ist, das nur die Meldung Timeout druckt und tut nichts. Wie kann ich das beheben, damit ich erreichen kann, was ich anvisiere?
Schreiben Sie keinen Code, der 'waitFor'-Methoden verwendet, und Sie werden solche Probleme nicht haben. Für einen möglichen Ansatz, der lesbaren Code bereitstellt und asynchrones Verhalten gut beherrscht, siehe [diese Antwort] (https://stackoverflow.com/a/32595398/1329652). Siehe auch [answer1] (https://stackoverflow.com/a/43703784/1329652), [answer2] (https://stackoverflow.com/a/36437247/1329652) und [answer3] (https: // stackoverflow. com/a/40247676/1329652). –