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()){
То получаю полноценный ответ
В чем может быть причина?
  • Вопрос задан
  • 316 просмотров
Решения вопроса 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().
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы