Qt 通过串口读取地磅数据

新建 Qt Widget 项目命名为“WeighBridge”

配置文件里加入串口支持,如下:

QT       += core gui serialport

在mainwindow.h里加入开启串口读取的SLOT,如下:

mainwindow.h头文件:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSerialPort>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void openSerialPort();

private:
    Ui::MainWindow *ui;
    QSerialPort *m_serial = nullptr;
    initActionsConnections();
    readWeighBridgeData();
    putWeighBridgeData(QByteArray &wbd);
    QByteArray weighBridgeData;
};

#endif // MAINWINDOW_H

mainwindow.cpp文件:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    m_serial = new QSerialPort();
    initActionsConnections();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::openSerialPort()
{
    m_serial->setPortName("COM3");
    m_serial->setBaudRate(2400);
    m_serial->open(QIODevice::ReadWrite);
}

MainWindow::initActionsConnections()
{
    connect(m_serial, &QSerialPort::readyRead, this, &MainWindow::readWeighBridgeData);
    this->openSerialPort();
    this->readWeighBridgeData();
}

MainWindow::readWeighBridgeData()
{
    QByteArray data = m_serial->readAll();
    this->putWeighBridgeData(data);
}

MainWindow::putWeighBridgeData(QByteArray &wbd)
{
    weighBridgeData.append(wbd);
    if(weighBridgeData.length()>20){
        QString qqba = QString(weighBridgeData);
        qqba = qqba.mid(qqba.indexOf("\u0002")+1,-1);
        if(qqba.length()>6){
            qDebug()<< qqba.mid(0,6).toFloat()/100;
        }
        weighBridgeData.clear();
    }
}

运行后控制台会显示地磅读数

猜你喜欢

转载自my.oschina.net/zhizhisoft/blog/1808277