我正在使用下面的代码打开一个串行端口来与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对我缺少的端口做了一些事情,但据我所知,我使用与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)丢失
发布于 2014-04-21 14:26:34
我不知道如何使用QT设置fOutX和fIutX。
请阅读我的答案是在here。
还要确信Putty (或您的arduino终端)配置(奇偶、流量控制、波特率)与QSerialPort配置相同。此外,您还可以尝试终端示例(来自QtSerialPort示例),例如代替Putty (或您的arduino终端)。
UPD:
您可以尝试添加:
setDataTerminalReady(true);和
setRequestToSend(true);在港口开放后。
https://stackoverflow.com/questions/23198241
复制相似问题