[英]Unable to communicate with arduino using QSerialPort if the arduino-ide has not opened the connection before
我使用以下代码打开一个串口与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
但它没有任何效果。 我不知道如何使用QT设置fOutX
和fIutX
。
可能导致此错误的任何想法?
编辑:解决方案: port.setDataTerminalReady(true)
我不知道如何使用QT设置fOutX和fIutX。
请在这里阅读我的答案。
还要确信Putty(或您的arduino-terminal)配置(奇偶校验,流量控制,波特率)与QSerialPort配置相同。 此外,您可以尝试终端示例(来自QtSerialPort示例),例如,而不是Putty(或您的arduino终端)。
UPD:
您可以尝试添加:
setDataTerminalReady(true);
和
setRequestToSend(true);
港口开通后。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.