QT學習筆記——串口通信

一、test.pro

添加模塊:

    QT +=  serialport

二、mainwindow.h

添加頭文件:

    #include <QtSerialPort/QSerialPort>
    #include <QtSerialPort/QSerialPortInfo>

修改類:

    private:
        QSerialPort *serial;
    private slots:
        void ReadData();
        void SendData();
        void on_pushButton_findcom_clicked();
        void on_pushButton_opencom_clicked()

三、mainwindow.cpp

1.查找串口

按鈕 pushButton_findcom,下拉菜單 comboBox_com1

    void MainWindow::on_pushButton_findcom_clicked(){
            foreach (const QSerialPortInfo &info,QSerialPortInfo::availablePorts()){
                QSerialPort serial;
                serial.setPort(info);
                if(serial.open(QIODevice::ReadWrite)){
                    ui->comboBox_com1->addItem(serial.portName());
                    serial.close();
                }
            }
            ui->comboBox_com1->setCurrentIndex(0); //設(shè)置波特率下拉菜單默認顯示第0項
    }

2.打開串口

按鈕 pushButton_opencom,text:打開串口

    void MainWindow::on_pushButton_opencom_clicked(){
        if(ui->pushButton_opencom->text() == tr("打開串口")){
            serial = new QSerialPort;
            serial->setPortName(ui->comboBox_com1->currentText());
            serial->open(QIODevice::ReadWrite);
            serial->setBaudRate(QSerialPort::Baud115200);
            serial->setDataBits(QSerialPort::Data8);
            serial->setParity(QSerialPort::NoParity);
            serial->setStopBits(QSerialPort::OneStop);
            serial->setFlowControl(QSerialPort::NoFlowControl);
            ui->pushButton_opencom->setText(tr("關(guān)閉串口"));
            QObject::connect(serial,SIGNAL(readyRead()),this,SLOT(ReadData()));
        }
        else{
            //關(guān)閉串口
            serial->clear();
            serial->close();
            serial->deleteLater();
            ui->pushButton_opencom->setText(tr("打開串口"));
        }
    }

3.讀取數(shù)據(jù)

void MainWindow::ReadData(){
    QByteArray byte = serial->readAll();
    //校驗幀頭
    if(byte.size()<11)return;
    if(!((byte.toHex().at(0)=='5'&&byte.toHex().at(1)=='a')||(byte.toHex().at(0)=='5'&&byte.toHex().at(1)=='A')))return;
   /* QString showstr;
    for(int i=0;i<byte.length();i++){
        showstr += QString("%1").arg((uchar)byte.at(i),2,16,QLatin1Char('0')).toUpper()+" ";
    }*/
/*//*******校驗和
    QString qdata[11];
    int     idata[11],sum=0x00;
    for(int i=0;i<10;i++){//數(shù)據(jù)
        qdata[i] = qstr.mid(2*i,2);
        idata[i] = qdata[i].toInt(&ok,16);
        sum += idata[i];
    }
    qdata[10] = qstr.mid(20,2);//校驗和
    idata[10] = qdata[10].toInt(&ok,16);
    if(sum!=idata[10])return;*/

    bool    ok;
    QString qstr = byte.toHex();
}

4.發(fā)送數(shù)據(jù)

void MainWindow::SendData(){
        QByteArray ba;
        ba.resize(4);
        ba[0]=0x5a;
        ba[1]=0x00;
        ba[2]=0x00;
        ba[3]=ba[0]+ba[1]+ba[2];
        serial->write(ba);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容