3

我正在使用以下代码打开一个串行端口以与 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的串口设置。他发现设置fDtrControlfOutX不同fIutX。我尝试更改fDtrControl,但没有效果。我不知道如何设置fOutXfIutX使用 QT。

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

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

4

1 回答 1

4

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

请阅读我的答案在这里

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

升级版:

您可以尝试添加:

setDataTerminalReady(true);

setRequestToSend(true);

港口开放后。

于 2014-04-21T14:26:34.553 回答