Я пытаюсь получить последовательное сообщение от устройства, похоже, что сигнал readyRead () активируется после 1, 2 или более символов, появившихся в последовательном буфере.
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
timerTx = new QTimer(this);
timerTx->setInterval(100);
timer.start();
serialRx = new QSerialPort(this);
serialRx->setPortName("COM5");
serialRx->setBaudRate(QSerialPort::Baud9600);
serialRx->setParity(QSerialPort::NoParity);
serialRx->setDataBits(QSerialPort::Data8);
serialRx->setStopBits(QSerialPort::OneStop);
serialRx->setFlowControl(QSerialPort::NoFlowControl);
serialTx = new QSerialPort(this);
serialTx->setPortName("COM3");
serialTx->setBaudRate(QSerialPort::Baud9600);
serialTx->setParity(QSerialPort::NoParity);
serialTx->setDataBits(QSerialPort::Data8);
serialTx->setStopBits(QSerialPort::OneStop);
serialTx->setFlowControl(QSerialPort::NoFlowControl);
connect(serialRx, SIGNAL(readyRead()), this, SLOT(serialReceive()));
connect(timerTx, SIGNAL(timeout()), this, SLOT(serialSend()));
connect(ui->pushButton, SIGNAL(clicked()), timerTx, SLOT(start()));
}
void MainWindow::serialReceive()
{
QByteArray baRx, num, numOfMs;
qint64 time_ms;
baRx = serialRx -> readAll();
qDebug() << baRx;
time_ms = timer.elapsed();
counterRecDev++;
num = QByteArray::number(counterRecDev);
numOfMs = QByteArray::number(time_ms);
ui->receiveWindow->insertPlainText(num + "\t" + baRx + " \t " + numOfMs +
"\n" );
ui->receiveWindow -> moveCursor(QTextCursor::End);
}
Я отправляю сообщение "@ Test $" через последовательный порт, но получаю следующее:
"@"
«Т»
"стандартное восточное время"
"%"
Другое время:
"@"
«Т»
«эс»
«Т»
"%"
Подскажите пожалуйста, как это решить? Может быть, проблема в том, что я использую сигнал readyRead ()?
С наилучшими пожеланиями.