Я пытаюсь установить связь из приложения QT в Arduino. Процесс выглядит следующим образом: приложение QT отправляет «1», и ожидается, что Arduino ответит некоторыми данными (длина строки данных огромна, около 300). Приложение QT отправляет «1» с частотой около 5 Гц (каждые 200 мс).
Проблема, с которой я сталкиваюсь, заключается в накопительной задержке между обменом данными между Arduino и QT. То есть данные, которые я получаю от Arduino, не являются недавними данными, но частота прихода данных Arduino составляет всего 5 Гц (что и ожидалось), только приход данных не является недавним. Эта задержка увеличивается со временем. Я считаю, что есть какая-то проблема с буфером или чем-то еще.
Что я пробовал:
QSerialPort serialPort;
- это порт моего устройства
serialPort.clear()
serialPort.flush()
- Увеличение и уменьшение скорости передачи данных с обоих концов.
- Уменьшите длину символа в Arduino, здесь задержка значительно уменьшается, но накопленная задержка наблюдается через долгое время.
для очистки буфера последовательной связи, но проблема все еще сохраняется.
Вот мой фрагмент кода:
connect(timer_getdat, SIGNAL(timeout()), this, SLOT(Rec()));
timer_getdat->start(200);
, где Rec()
- функция, в которой я выполняю коммуникационную часть.
В Rec()
:
serialPort.write("1", 2);
// serialPort.waitForBytesWritten(100);
long long bytes_available = serialPort.bytesAvailable();
if (bytes_available >= 1)
{
serialPort.readLine(temp, 500);
serialPort.flush(); // no change
serialPort.clear(); // no change by .clear() also
}
Я застрял в этом вопросе довольно долго. Приведенный выше фрагмент кода - это то, что я считаю необходимым, но если кому-то понадобится больше разъяснений, я могу раскрыть больше кода.