我正在尝试通过 USB 读取设备插头发送的数据。首先我通过这个命令读取数据
- sudo stty -F /dev/ttyUSB0 1200 sane parenb evenp cs7 -crtscts
- 猫 /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() 显示数据
编辑
感谢迈克,我终于可以阅读这个 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();