【问题标题】:QextSerialPort connection problem to ArduinoQextSerialPort 与 Arduino 的连接问题
【发布时间】:2010-06-29 15:09:52
【问题描述】:

我正在尝试使用 QextSerialPort 与 Arduino Diecimila 板进行串行连接。每次我调用 port->open() 时,我的应用程序都会挂起。我认为发生这种情况的原因是每次与它建立串行连接时,Arduino 板都会自行重置。有一种方法可以不让here 描述的板复位,但我不知道如何让 QextSerialPort 做到这一点。我只能在端口打开后将 DTR 设置为 false,这并没有多大帮助,因为此时主板已经自行重置。

连接代码如下所示:

 port = new QextSerialPort("/dev/tty.usbserial-A4001uwj");
 port->open(QIODevice::ReadWrite);
 port->setBaudRate(BAUD9600);   
 port->setFlowControl(FLOW_OFF);
 port->setParity(PAR_NONE);    
 port->setDataBits(DATA_8);   
 port->setStopBits(STOP_1);
 port->setDtr(false);
 port->setRts(false);

关于如何完成这项工作的任何想法。如果有人知道另一个库可以做到这一点,我不一定需要使用 QextSerialPort。

我是 C++ 和 Qt 的新手。

更新: 我注意到,如果我在运行上述代码之前运行一个连接到同一端口的 python 脚本(使用 pySerial),一切正常。

【问题讨论】:

  • 有没有试过在open()之前做设置?
  • 是的,我有。对于某些设置,如果它们被设置为未打开的端口(如 setDtr()),它们将不做任何事情。它尝试了两种方式,但没有任何帮助。
  • 听起来像是 Qextserial 的错误/改进,应该允许您在 ctor 打开端口之前设置所有参数
  • @Matt:考虑切换到 QtSerialPort?

标签: c++ qt arduino qextserialport


【解决方案1】:

我也遇到过类似的问题。

在我的情况下,QExtSerial 会打开端口,我会看到板上的 RX/TX 灯闪烁,但不会收到任何数据。如果我先用另一个终端程序打开端口,QExtSerial 将按预期工作。

为我解决的方法是打开端口,配置端口设置,然后在短时间内将 DTR 和 RTS 设为高电平。

这是在带有 ATMega32u4 (SFE Pro Micro) 的 Windows 7 上。


bool serialController::openPort(QString portName) { QString selectPort = QString("\\\\.\\%1").arg(portName); this->port = new QextSerialPort(selectPort,QextSerialPort::EventDriven); if (port->open(QIODevice::ReadWrite | QIODevice::Unbuffered) == true) { port->setBaudRate(BAUD38400); port->setFlowControl(FLOW_OFF); port->setParity(PAR_NONE); port->setDataBits(DATA_8); port->setStopBits(STOP_1); port->setTimeout(500); port->setDtr(true); port->setRts(true); Sleep(100); port->setDtr(false); port->setRts(false); connect(port,SIGNAL(readyRead()), this, SLOT(onReadyRead())); return true; } else { // Device failed to open: port->errorString(); } return false; }

【讨论】:

    【解决方案2】:

    libserial 是一个令人难以置信的库,我将其用于我的 Arduino Duemilanove 的独立串行应用程序。

    【讨论】:

    • 您好,感谢您的回答。不幸的是,这些项目现在已经结束了很长一段时间,但下次我手头有 Arduino 时,我一定会试一试。
    • 是的,这个答案对解决手头的问题没有帮助(C++/Qt)。
    【解决方案3】:

    qserialdevice 使用!

    例子:

    http://robocraft.ru/blog/544.html

    【讨论】:

    • 不!那是过时的,未维护的,并且在迁移到 Qt 之前有几个缺陷,并重命名为 QtSerialPort。你介意删除这个答案吗?
    【解决方案4】:

    您可以只使用没有 DTR、RTS 线的 3 线串行电缆 (tx/rx/gnd) 吗?

    【讨论】:

    • 我不能。但这并不重要,因为该项目已经完成了一段时间。不过感谢您的提示。
    猜你喜欢
    • 1970-01-01
    • 2012-04-26
    • 2023-04-03
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多