首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果arduino-ide以前没有打开连接,则无法使用QSerialPort与arduino通信。

如果arduino-ide以前没有打开连接,则无法使用QSerialPort与arduino通信。
EN

Stack Overflow用户
提问于 2014-04-21 13:17:42
回答 1查看 2.4K关注 0票数 3

我正在使用下面的代码打开一个串行端口来与arduino通信。

代码语言:javascript
复制
  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);
  }

之后,我尝试使用以下代码从连接中读取:

代码语言:javascript
复制
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上运行的代码:

代码语言:javascript
复制
void setup() 
{
  Serial.begin(115200);
  Serial.write(RDY);
}

This guy也有类似的问题,他比较了putty和QSerialPort的串口设置。他发现fDtrControlfOutXfIutX的设置不同。我试着改变fDtrControl,但没有效果。我不知道如何使用QT设置fOutXfIutX

有什么可能导致这个错误的原因吗?

编辑:解决方案:port.setDataTerminalReady(true)丢失

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-21 14:26:34

我不知道如何使用QT设置fOutX和fIutX。

请阅读我的答案是在here

还要确信Putty (或您的arduino终端)配置(奇偶、流量控制、波特率)与QSerialPort配置相同。此外,您还可以尝试终端示例(来自QtSerialPort示例),例如代替Putty (或您的arduino终端)。

UPD:

您可以尝试添加:

代码语言:javascript
复制
setDataTerminalReady(true);

代码语言:javascript
复制
setRequestToSend(true);

在港口开放后。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23198241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档