Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QextSerialPort到Arduino的连接问题_C++_Qt_Arduino_Qextserialport - Fatal编程技术网

C++ QextSerialPort到Arduino的连接问题

C++ QextSerialPort到Arduino的连接问题,c++,qt,arduino,qextserialport,C++,Qt,Arduino,Qextserialport,我正在尝试使用QextSerialPort与Arduino Diecimila板进行串行连接。每次调用port->open()时,我的应用程序都会挂起。我认为发生这种情况的原因是,每次与Arduino板进行串行连接时,Arduino板都会自动复位。有一种方法可以不让电路板复位,但我不知道如何让QextSerialPort复位。我只能在端口打开后将DTR设置为false,这没有多大帮助,因为此时电路板已经自行复位 连接的代码如下所示: port = new QextSerialPort("/de

我正在尝试使用QextSerialPort与Arduino Diecimila板进行串行连接。每次调用port->open()时,我的应用程序都会挂起。我认为发生这种情况的原因是,每次与Arduino板进行串行连接时,Arduino板都会自动复位。有一种方法可以不让电路板复位,但我不知道如何让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.</P>是新的。 更新:
我注意到,如果在运行上述代码之前运行一个连接到同一端口(使用pySerial)的python脚本,一切正常。

是我用于Arduino Duemilanove的独立串行应用程序的难以置信的库。

是我用于Arduino Duemilanove的独立串行应用程序的难以置信的库。

你能使用没有DTR的三线串行电缆(tx/rx/gnd)吗,RTS线路?

您可以只使用三线串行电缆(tx/rx/gnd)而不使用DTR、RTS线路吗?

Q串行设备使用

例如:

q串行设备使用

例如:


我也有类似的问题

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

对我来说,解决这个问题的方法是打开端口,配置端口设置,然后在短时间内使DTR和RTS处于高位

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



bool serialController::openPort(QString端口名){
QString selectPort=QString(“\\\.\\%1”).arg(端口名);
此->端口=新QextSerialPort(选择端口,QextSerialPort::EventDriven);
如果(端口->打开(QIODevice::ReadWrite | QIODevice::Unbuffered)=true){
端口->收包率(波特率38400);
端口->设置流量控制(流量关闭);
端口->设置奇偶校验(无参数);
端口->设置数据位(数据_8);
端口->设置位(停止1);
端口->设置超时(500);
端口->设置DTR(真);
端口->设置RTS(真);
睡眠(100);
端口->设置DTR(错误);
端口->设置RTS(错误);
连接(端口,信号(readyRead()),此,插槽(onReadyRead());
返回true;
}否则{
//无法打开设备:端口->错误字符串();
}
返回false;
}

我也有类似的问题

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

对我来说,解决这个问题的方法是打开端口,配置端口设置,然后在短时间内使DTR和RTS处于高位

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



bool serialController::openPort(QString端口名){
QString selectPort=QString(“\\\.\\%1”).arg(端口名);
此->端口=新QextSerialPort(选择端口,QextSerialPort::EventDriven);
如果(端口->打开(QIODevice::ReadWrite | QIODevice::Unbuffered)=true){
端口->收包率(波特率38400);
端口->设置流量控制(流量关闭);
端口->设置奇偶校验(无参数);
端口->设置数据位(数据_8);
端口->设置位(停止1);
端口->设置超时(500);
端口->设置DTR(真);
端口->设置RTS(真);
睡眠(100);
端口->设置DTR(错误);
端口->设置RTS(错误);
连接(端口,信号(readyRead()),此,插槽(onReadyRead());
返回true;
}否则{
//无法打开设备:端口->错误字符串();
}
返回false;
}

在打开()之前,您是否尝试过进行设置?是的,我尝试过。对于某些设置,它表示如果设置为未打开的端口(如setDtr()),则它们不会执行任何操作。虽然它尝试了两种方法,但没有任何帮助。听起来像是Qextserial的一个错误/改进,应该允许您在打开ctor之前设置ctor中的所有参数port@Matt:考虑切换到QtSerialPort?在打开()之前您是否尝试过进行设置?是的,我尝试过。对于某些设置,它表示如果设置为未打开的端口(如setDtr()),则它们不会执行任何操作。虽然它尝试了两种方法,但没有任何帮助。听起来像是Qextserial的一个错误/改进,应该允许您在打开ctor之前设置ctor中的所有参数port@Matt:考虑切换到QtSerialPort?嗨,谢谢你的回答。不幸的是,这些项目已经结束了很长一段时间,但我肯定会在下次有Arduino的时候试一试。是的,这个答案对手头的问题(C++/Qt)没有帮助。嗨,谢谢你的答案。不幸的是,这些项目已经结束了很长一段时间,但我肯定会在下次我手头上有Arduino时尝试一下。是的,这个答案对手头的问题(C++/Qt)没有帮助。我不能。不过,这已经不重要了,因为这个项目已经完成很久了。不过谢谢你的提示,我不能。不过,这已经不重要了,因为这个项目已经完成很久了。谢谢你的提示,不!这是过时的、未维护的,在迁移到Qt并重命名为QtSerialPort之前,它有几个缺陷。你介意删除这个答案吗?不!这是过时的、未维护的,在迁移到Qt并重命名为QtSerialPort之前,它有几个缺陷。你介意删除这个答案吗?


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