基本通信与QSerialPort

Basic Communications with QSerialPort

本文关键字:QSerialPort 通信      更新时间:2023-10-16

我正试图在QT中建立一些基本的串行通信我从QSerialPortInfo获得端口COM19,我通过Arduino成功地与端口通话。然而,我不能通过QT得到任何东西。

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    foreach(const QSerialPortInfo &info, QSerialPortInfo::availablePorts()){
        qDebug() << "Name  :" << info.portName();
        qDebug() << "Description  :" << info.description();
        qDebug() << "Manufactuer :"  << info.manufacturer();
        QSerialPort serial;
        serial.setPort(info);
        if(serial.open(QIODevice::ReadWrite))
            qDebug() << serial.errorString();
            serial.write("M114 n");
            qDebug() << serial.readAll();
            serial.close();
            // Now we need to send and receive commands
            serial.setPortName("COM19");
            serial.setBaudRate(QSerialPort::Baud57600);
            serial.setDataBits(QSerialPort::Data8);
            serial.setParity(QSerialPort::NoParity);
            serial.setStopBits(QSerialPort::OneStop);
            serial.setFlowControl(QSerialPort::NoFlowControl);
            if(serial.open(QIODevice::ReadWrite)){
                qDebug() << "opened";
              }else{
                qDebug() << "Not opened";
            }
           qDebug() << serial.errorString();
            serial.write("M114 n");
            qDebug() << serial.readAll();
            serial.close();

    }


    MainWindow w;
    w.show();
    return a.exec();
}

正如您所看到的,我正在沿着文档的行尝试一个简单的连接,其中我写出了所有波特率信息。他们犯了两种不同的错误。

就像我说的,我通过arduino连接到这个端口,并取得了成功。知道怎么回事吗?

Name  : "COM19" 
Description  : "USB Serial (Communication Class, Abstract Control Model)" 
Manufactuer : "PJRC.COM, LLC." 
"Unknown error" 
"" 
opened 
"The handle is invalid." 
"" 

有什么想法我做错了吗?

我的想法是发送命令到设备,并将它们读取回控制台。

代码看起来有点混乱。你打开所有可用的端口,然后你试图做一些错误的事情。

注意:您可以像shell应用程序一样使用GUI应用程序。这是错误的。

试题:

#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
#include <QTextStream>
#include <QFile>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QSerialPort serial;
    serial.setPortName("COM19");
    if(serial.open(QIODevice::ReadWrite)){
        //Now the serial port is open try to set configuration
        if(!serial.setBaudRate(QSerialPort::Baud57600))
            qDebug()<<serial.errorString();
        if(!serial.setDataBits(QSerialPort::Data8))
            qDebug()<<serial.errorString();
        if(!serial.setParity(QSerialPort::NoParity))
            qDebug()<<serial.errorString();
        if(!serial.setStopBits(QSerialPort::OneStop))
            qDebug()<<serial.errorString();
        if(!serial.setFlowControl(QSerialPort::NoFlowControl))
            qDebug()<<serial.errorString();
        //If any error was returned the serial il corrctly configured
        serial.write("M114 n");
        //the serial must remain opened
        if(serial.waitForReadyRead(100)){
            //Data was returned
            qDebug()<<"Response: "<<serial.readAll();
        }else{
            //No data
            qDebug()<<"Time out";
        }
        //I have finish alla operation
        serial.close();
    }else{
        qDebug()<<"Serial COM19 not opened. Error: "<<serial.errorString();
    }
    MainWindow w;
    w.show();
    return a.exec();
}

从第十个端口开始,他的名字将是\ COM10

您可以在设备管理器

中重新分配端口到不同的号码