我正在使用以下代码打开串口与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 guy有过类似的问题,他比较了putty和QSerialPort的串口设置。他发现 fDtrControl
、fOutX
和 fIutX
的设置不同。我尝试更改 fDtrControl
但没有效果。我不知道如何使用 QT 设置 fOutX
和 fIutX
。
有什么想法可能导致此错误吗?
编辑:
解决方案:port.setDataTerminalReady(true)
丢失
最佳答案
I do not know how to set fOutX and fIutX using QT.
请阅读我的答案在 here 中.
还要确信 Putty(或您的 arduino 终端)配置(奇偶校验、流量控制、波特率)与 QSerialPort 配置相同。此外,您可以尝试终端示例(来自 QtSerialPort 示例),例如而不是 Putty(或您的 arduino 终端)。
更新:
你可以尝试添加:
setDataTerminalReady(true);
和
setRequestToSend(true);
端口打开后。
关于c++ - 如果 arduino-ide 之前没有打开连接,则无法使用 QSerialPort 与 arduino 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23198241/