【发布时间】:2014-06-05 13:37:17
【问题描述】:
我正在使用以下代码打开一个串口与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);
}
This 小伙也遇到过类似的问题,他对比了putty和QSerialPort的串口设置。他发现fDtrControl、fOutX 和fIutX 的设置不同。我尝试更改fDtrControl,但没有效果。我不知道如何使用QT设置fOutX和fIutX。
任何想法可能导致此错误?
编辑:
解决方案:port.setDataTerminalReady(true) 丢失
【问题讨论】:
-
嗨阿恩。您使用的是哪个 QtSerialPort 版本?是 Qt 4.8.5 和自定义构建,还是 5.2.1 二进制包?另外,如果您使用 5.3 beta 或 master 的代码,您会更轻松,因为您可以在打开之前设置端口。
-
@LaszloPapp 我正在使用 Qt 5.2.0 附带的 QtSerialPort(二进制包)
-
你的失败测试逻辑是错误的。而不是
if (!a && !b && !c),它应该是if (!a || !b || !c)。 -
@ArneBöckmann:命令行示例(同步或异步)是否适用于阅读?
-
@KubaOber Ops,谢谢。然而,这并没有改变问题:)
标签: c++ qt arduino arduino-ide qtserialport