在和一些硬件设备的通信(伺服机等)中,串口通信是最常用的,在此整理下串口通信的程序,核心代码包括两个文件com.h和com.cpp,如下所示:
com.h
#ifndef COM_H
#define COM_H
#include <QObject>
#include<QtSerialPort/QSerialPort>
#include<QtSerialPort/QSerialPortInfo>
#include<QMessageBox>
#include<QDebug>
#include<QByteArray>
#include<iostream>
#include<vector>
using namespace std;
class COM : public QObject
{
Q_OBJECT
public:
explicit COM(QObject *parent = nullptr);
QSerialPort *serial;
signals:
void newMessage(vector<int> data);
public slots:
//接收数据
void dataReceived();
};
#endif // COM_H
com.cpp
#include "com.h"
COM::COM(QObject *parent) : QObject(parent)
{
serial = new QSerialPort;
serial->setPortName("COM1");
if(!serial->open(QIODevice::ReadWrite))
{
qDebug()<<"串口打开失败";
}
serial->setBaudRate(QSerialPort::Baud57600);//设置波特率为57600
serial->setDataBits(QSerialPort::Data8);//设置数据位8
serial->setParity(QSerialPort::NoParity); //校验位设置为0
serial->setStopBits(QSerialPort::OneStop);//停止位设置为1
serial->setFlowControl(QSerialPort::NoFlowControl);//设置为无流控制
//connect(serial,&QSerialPort::readyRead,this,&MainWindow::ReadData);
QObject::connect(serial,&QSerialPort::readyRead,this,&COM::dataReceived);
}
void COM::dataReceived()
{
//接收数据存入vector<double>,
QByteArray temp = serial->readAll();
QDataStream out(&temp,QIODevice::ReadWrite);
vector<int> arr;
while(!out.atEnd())
{
qint8 outChar = 0;
out>>outChar;
QString str = QString("%1").arg(outChar&0xFF,2,16,QLatin1Char('0'));
arr.push_back(str.toInt(NULL,16));
}
emit newMessage(arr);
}
在自己的项目中,如果要使用串口通信,加入上述的两个文件之后,然后建立和信号自己的关联即可。上述展示的只是接收信息的方法,发送信息直接调用com类中的成员变量serial的成员方法write即可。