我正在使用以下代码打开一个串行端口以与 arduino 进行通信。
const qint32 baud = Global::getInstance().getSettings().value("Hardware/baudRate", 115200).toInt();
const QString portName = Global::getInstance().getSettings().value("Hardware/port", "COM3").toString();
port.setPortName(portName);
if(!port.open(QIODevice::ReadWrite))
{
qFatal("Unable to open serial port");
exit(1);
}
if(!port.setParity(QSerialPort::NoParity) ||
!port.setStopBits(QSerialPort::OneStop) ||
!port.setDataBits(QSerialPort::Data8) ||
!port.setFlowControl(QSerialPort::NoFlowControl ) ||
!port.setBaudRate(baud))
{
qFatal("Unable to configure serial port");
exit(1);
}
if(port.error() != QSerialPort::NoError)
{
qFatal("some error occurred!");
exit(1);
}
之后我尝试使用以下代码从连接中读取:
bool Light::waitForReady()
{
char data[1];
data[0] = -1;
if(port.waitForReadyRead(10000))
{
const int numRead = port.read(&data[0], 1);
if(numRead == 1)
{
return data[0] == (char)RDY;
}
else
{
qWarning("Read error, read %d bytes", numRead);
}
}
else
{
qWarning("Read timeout");
return false;
}
return false;
}
读取不起作用,等待 10 秒后超时。但是,当我在运行我的 QT 代码之前打开和关闭 arduino-ide 内的串行监视器时,它可以工作。我的猜测是 ardunio-ide 对我缺少的端口做了一些事情,但据我所知,我使用与 arduino-ide 完全相同的设置来打开串行端口。
这是在 arduino 上运行的代码:
void setup()
{
Serial.begin(115200);
Serial.write(RDY);
}
这家伙也有类似的问题,他比较了putty和QSerialPort的串口设置。他发现设置fDtrControl
和fOutX
不同fIutX
。我尝试更改fDtrControl
,但没有效果。我不知道如何设置fOutX
和fIutX
使用 QT。
任何想法可能导致此错误?
编辑:
解决方案:port.setDataTerminalReady(true)
丢失