QextSerialPort与Arduino的连接问题

时间:2010-06-29 15:09:53

标签: c++ qt arduino qextserialport

我正在尝试使用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),一切正常。

4 个答案:

答案 0 :(得分:2)

我遇到了类似的问题。

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

为我解决的问题是打开端口,配置端口设置,然后在短时间内使DTR和RTS保持高电平。

这是在Windows 7上使用的是ATMega32u4(SFE Pro Micro)。




    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;
    }

答案 1 :(得分:1)

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

答案 2 :(得分:1)

使用qserialdevice!

示例:

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

答案 3 :(得分:0)

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