QSerialPort和Arduino - 句柄无效 - 无法连接

时间:2013-11-18 13:20:47

标签: qt serial-port arduino

我在Qt 5.1.1中的Arduino应用程序有问题

我使用过QextSerialPort然后我想升级到QtSerialPort,它是Qt5.1.1的一部分

该应用正在使用QextSerialPort。 所以我只改变了一些东西,但核心应该是一样的。因此,我想知道为什么我无法连接到Arduino。

当要求errorString()时,答案是'句柄无效'

这是我的代码:

void MainWindow::init_schnittstelle()
{
    port = new QSerialPort; //create the port

    port->setPortName(schnittstelle); //create the port
    port->setBaudRate(QSerialPort::Baud115200);
    port->setFlowControl(QSerialPort::NoFlowControl);
    port->setParity(QSerialPort::NoParity);
    port->setDataBits(QSerialPort::Data8);
    port->setStopBits(QSerialPort::OneStop);

    port->open(QIODevice::ReadWrite | QIODevice::Unbuffered); //open the port
    schnittstelleZustand = port->errorString();

    if(!port->isOpen())
    {
        QMessageBox::warning(this, "Schnittstelle", "Schnittstelle "+schnittstelle+" reagiert nicht. "+schnittstelleZustand);
    }
    else{
        schnittstelleZustand = ("verbunden");
    }


}

在变量schnittstelle中给出了地址。我可以连接到arduino每个Arduino软件,所以我确信我的Arduino是在COM10上,但这说我不是......

怎么了?

2 个答案:

答案 0 :(得分:0)

http://qt-project.org/doc/qt-5.1/qtserialport/qserialport.html#details

  

提供访问串行端口的功能。

     

您可以获取信息   关于使用QSerialPortInfo帮助程序的可用串行端口   class,允许枚举中的所有串口   系统。这对于获取串行端口的正确名称很有用   你想用。您可以将辅助类的对象作为一个传递给   分配setPort()setPortName()方法的参数   所需的串行设备。

尝试使用QSerialPortInfo对象枚举您的端口,然后打印出端口名称。

http://qt-project.org/doc/qt-5.1/qtserialport/qserialportinfo.html#portName

拥有有效的端口名称后,您的无效句柄应该消失。

希望有所帮助。

答案 1 :(得分:0)

我检查了Qt文档,我看到了:

  

警告:模式必须是QIODevice :: ReadOnly,QIODevice :: WriteOnly或QIODevice :: ReadWrite。其他模式不受支持。

更改您的代码

port->open(QIODevice::ReadWrite | QIODevice::Unbuffered);

port->open(QIODevice::ReadWrite);

再试一次。

有文档链接

http://qt-project.org/doc/qt-5/qserialport.html#open