我在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;
...
答案 0 :(得分:2)
您在open()
之后立即致电readLine()
。计算机可能需要几纳秒才能从一台计算机到另一台计算机。
在9600波特率下,每个数据字节的传输时间略长于1毫秒。任何数据绝对不可能在那么短的间隔内到达,这就是为什么你没有数据的原因。
串口没有开始缓冲输入数据,直到你打开它们(如果没有程序打开端口,它们怎么能用于接收和缓冲的波特率和其他设置?)
使用某种阻塞读取函数(例如FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
)或在数据到达时对数据作出反应的事件循环。