我正在尝试通过USB读取设备插头发送的数据。
首先,我通过以下命令读取数据:
- sudo stty -F /dev/ttyUSB0 1200 sane parenb evenp cs7 -crtscts
- cat /dev/ttyUSB0
数据的格式如下:
TGPHI_s -0,24 =
MESURES2 BT 4 SUP36 A
PTCOUR2 HPH /
现在我想通过一个Qt5.3程序读取数据
QSerialPort serial;
serial.setPortName("ttyUSB0");
if(!serial.setBaudRate(QSerialPort::Baud1200 , QSerialPort::Input))
qDebug() << serial.errorString();
if(!serial.setDataBits(QSerialPort::Data7))
qDebug() << serial.errorString();
if(!serial.setParity(QSerialPort::EvenParity))
qDebug() << serial.errorString();
if(!serial.setFlowControl(QSerialPort::HardwareControl))
qDebug() << serial.errorString();
if(!serial.setStopBits(QSerialPort::OneStop))
qDebug() << serial.errorString();
if(!serial.open(QIODevice::ReadOnly))
qDebug() << serial.errorString();
qDebug() << serial.bytesAvailable();
while(true)
{
if (serial.isOpen()) {
qDebug() << "Serial port is open...";
QByteArray datas = serial.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: " << serial.errorString();
}
}
return 0;
答案是 ->
"/dev/ttyUSB0"
0
Serial port is open...
Arrived data: 0
Serial port is open...
Arrived data: 0
所以我的程序没有捕获到任何数据......
- 我在QSerialPort的设置中错过了什么吗?
- 如果没有,为什么没有通过qDebug()显示数据?
编辑
感谢Mike,我终于可以读取这个USB设备!!!以下是我的最终代码:
QSerialPort serial;
serial.setPortName("ttyUSB0");
if(!serial.setBaudRate(QSerialPort::Baud1200))
qDebug() << serial.errorString();
if(!serial.setDataBits(QSerialPort::Data7))
qDebug() << serial.errorString();
if(!serial.setParity(QSerialPort::EvenParity))
qDebug() << serial.errorString();
if(!serial.setFlowControl(QSerialPort::HardwareControl))
qDebug() << serial.errorString();
if(!serial.setStopBits(QSerialPort::OneStop))
qDebug() << serial.errorString();
if(!serial.open(QIODevice::ReadOnly))
qDebug() << serial.errorString();
QObject::connect(&serial, &QSerialPort::readyRead, [&]
{
//this is called when readyRead() is emitted
//qDebug() << "New data available: " << serial.bytesAvailable();
qDebug() << "New data available: " << serial.bytesAvailable();
QByteArray datas = serial.readAll();
qDebug() << datas;
});
QObject::connect(&serial,
static_cast<void(QSerialPort::*)(QSerialPort::SerialPortError)>
(&QSerialPort::error),
[&](QSerialPort::SerialPortError error)
{
//this is called when a serial communication error occurs
qDebug() << "An error occured: " << error;
return qApp->quit();
});
if(!serial.open(QIODevice::ReadOnly))
qDebug() << serial.errorString();
return qApp->exec();
serial.setStopBits(QSerialPort::TwoStop)
而不是一个停止位,因为我不确定sane
在stty
中如何设置它。 - Mikestatic_cast
从类型QSerialPort::SerialPortError (QSerialPort ::*)() const
转换到类型void (QSerialPort::*)(QSerialPort::SerialPortError)
是无效的,你能帮我吗? - rudaQAbstractSocket::error
已被移除,并被QAbstractSocket::errorOccurred
取代。这消除了丑陋的转换需求。请查看我的更新答案... - Mike