繁体   English   中英

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

[英]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的串口设置。 他发现fDtrControlfOutXfIutX的设置不同。 我尝试更改fDtrControl但它没有任何效果。 我不知道如何使用QT设置fOutXfIutX

可能导致此错误的任何想法?

编辑:解决方案: 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM