Задать вопрос
Il_noor
@Il_noor
Физик

Почему QSerialPort считывает только первый символ?

Добрый день
С помощью QSerialPortInfo получаю возможные COM ports.
Если они не заняты, то отправляю байты.
Получаю только один символ.

for (const QSerialPortInfo &info : QSerialPortInfo::availablePorts()){
            if (!info.isBusy())
            {
                QSerialPort newSerialPort;
                newSerialPort.setPortName(info.portName());
                newSerialPort.setBaudRate(QSerialPort::Baud9600);
                newSerialPort.setStopBits(QSerialPort::OneStop);
                newSerialPort.setDataBits(QSerialPort::Data8);
                newSerialPort.setParity(QSerialPort::NoParity);
                newSerialPort.setFlowControl(QSerialPort::NoFlowControl);
                newSerialPort.open(QIODevice::ReadWrite);
                    QByteArray ba;
                    ba.resize(5);
                    ba[0] = 0x55;
                    ba[1] = 0x55;
                    ba[2] = 0x00;
                    ba[3] = 0x00;
                    ba[4] = 0xaa;
                    newSerialPort.write(ba);
                    QByteArray data = newSerialPort.readAll();
                    qDebug() << "data" << data; // выводит только первый символ
}
}


Если все это делаю без for (const QSerialPortInfo &info : QSerialPortInfo::availablePorts()){
То получаю полноценный ответ
В чем может быть причина?
  • Вопрос задан
  • 600 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
Il_noor
@Il_noor Автор вопроса
Физик
Всем большое спасибо)
А вот решение
Взял отсюда: doc.qt.io/qt-5/qtserialport-blockingmaster-example.html

portCOM->write(ba);
portCOM->waitForReadyRead(200);

QByteArray data = portCOM->readAll();
while (portCOM->waitForReadyRead(10))
data += portCOM->readAll();
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@D3Nd3R
Используйте QSerialPort::waitForReadyRead() прежде чем читать из порта.
Так же можно реализовать асинхронное чтение, написав обработчик для сигнала readyRead().
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы