我正在QT中创建一个脚本,用于从串行端口读取格式包(AA),(BB)等。我打开了串行端口,但是当我检查QByteArray值内部时,又回来了,我无法读取任何值。
这是我的代码
...
QSerialPort *serialPort = new QSerialPort();
serialPort->setPortName("ttyUSB0");
serialPort->setParity(QSerialPort::NoParity);
serialPort->setBaudRate(QSerialPort::Baud9600, QSerialPort::AllDirections);
serialPort->setStopBits(QSerialPort::OneStop);
serialPort->setFlowControl(QSerialPort::NoFlowControl);
serialPort->open(QIODevice::ReadOnly);
if (serialPort->isOpen()) {
qDebug() << "Serial port is open...";
QByteArray datas = serialPort->readAll();
if (datas.size() == 0) {
qDebug() << "Arrived data: 0";
} else {
for (int i = 0; i < datas.size(); i++){
if (datas.at(i)) {
qDebug() << datas[i];
}
}
}
} else {
qDebug() << "OPEN ERROR: " << serialPort->errorString();
}
serialPort->close();
qDebug() << "...serial port is closed!";
return 0;
...
最佳答案
您在readAll()
之后立即致电open()
。从一台计算机到另一台计算机可能要花费几纳秒的时间。
在9600波特下,每个字节的数据传输花费的时间略超过一毫秒。在那么短的间隔内,任何数据都绝对不可能到达,因此这就是为什么您没有数据的原因。
串行端口在打开它们之前不会开始缓冲传入的数据(在没有程序打开端口的情况下,它们如何使用波特率和其他设置进行接收和缓冲?)
使用某种阻塞读取功能(例如readLine()
)或事件循环,在数据到达时会对数据做出反应。
关于c++ - 如何从QT的串行端口读取数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39678253/