文章目录
- 原版代码工程
- 增加QCustomplot实时画图的源码工程
- 源码
原版代码工程
源码下载链接:
链接:https://pan.baidu.com/s/15pWzadPwOx_OfJGtvL-MjA
提取码:lief
–来自百度网盘超级会员V5的分享
增加QCustomplot实时画图的源码工程
源码:
链接:https://pan.baidu.com/s/1DJKV7RY3C_1nQ1K2iNP61w
提取码:lief
–来自百度网盘超级会员V5的分享
下位机arduino测试代码:
#include <Arduino.h>
unsigned char data_to_send[100] = {0};
int acc_data[3] = {0};
int gyro_data[3] = {0};
#define BYTE0(dwTemp) (*(char *)(&dwTemp))
#define BYTE1(dwTemp) (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp) (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp) (*((char *)(&dwTemp) + 3))
void Data_Send_Senser(unsigned int pst)
{
unsigned char _cnt=0;
unsigned char i=0;
unsigned int j=0,temp;
unsigned char sum = 0;
data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0xAA;
data_to_send[_cnt++]=0x02;
data_to_send[_cnt++]=0;
data_to_send[_cnt++]=pst&0x00ff;
data_to_send[_cnt++]=pst>>8;
data_to_send[3] = _cnt-4;
for(i=0; i<_cnt; i++)
{
sum = sum+ data_to_send[i];
}
data_to_send[_cnt++] =sum;
Serial.write(data_to_send,_cnt);
}
void data_to_computer(int* acc_data,int* gyro_data)
{
unsigned char data_to_send[23] = {0};
unsigned char i = 0;
unsigned char cnt = 0;
unsigned char sum = 0;
data_to_send[cnt++]=0xAA;
data_to_send[cnt++]=0xAA;
data_to_send[cnt++]=0x02;
data_to_send[cnt++]=0;
data_to_send[cnt++] = BYTE1(acc_data[0]);
data_to_send[cnt++] = BYTE0(acc_data[0]);
data_to_send[cnt++] = BYTE1(acc_data[1]);
data_to_send[cnt++] = BYTE0(acc_data[1]);
data_to_send[cnt++] = BYTE1(acc_data[2]);
data_to_send[cnt++] = BYTE0(acc_data[2]);
data_to_send[cnt++] = BYTE1(gyro_data[0]);
data_to_send[cnt++] = BYTE0(gyro_data[0]);
data_to_send[cnt++] = BYTE1(gyro_data[1]);
data_to_send[cnt++] = BYTE0(gyro_data[1]);
data_to_send[cnt++] = BYTE1(gyro_data[2]);
data_to_send[cnt++] = BYTE0(gyro_data[2]);
data_to_send[cnt++]=0;
data_to_send[cnt++]=0;
data_to_send[cnt++]=0;
data_to_send[cnt++]=0;
data_to_send[cnt++]=0;
data_to_send[cnt++]=0;
data_to_send[3] = cnt-4;
for(i=0;i<cnt;i++)
{
sum+=data_to_send[i];
}
data_to_send[cnt++] = sum;
Serial.write(data_to_send,cnt);
}
void setup() {
Serial.begin(115200);
randomSeed(analogRead(0));
pinMode(8,OUTPUT);
}
void loop() {
digitalWrite(8,HIGH);
for(int i = 0; i < 255; i++)
{
Data_Send_Senser(i);
delay(2);
}
digitalWrite(8,LOW);
}
源码
mainwindows.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
qDebug() <<"main" <<QThread::currentThread();
qRegisterMetaType<serialportplus::Settings>("serialportplus::Settings");
initUI();
initSerialPort();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initUI()
{
for (int i = 1; i <= 15; i++)
{
ui->cboPortName->addItem(QString("COM%1").arg(i));
}
ui->cboBaudrate->addItem(QString("1200"),QSerialPort::Baud1200);
ui->cboBaudrate->addItem(QString("2400"),QSerialPort::Baud2400);
ui->cboBaudrate->addItem(QString("4800"),QSerialPort::Baud4800);
ui->cboBaudrate->addItem(QString("9600"),QSerialPort::Baud9600);
ui->cboBaudrate->addItem(QString("19200"),QSerialPort::Baud19200);
ui->cboBaudrate->addItem(QString("38400"),QSerialPort::Baud38400);
ui->cboBaudrate->addItem(QString("57600"),QSerialPort::Baud57600);
ui->cboBaudrate->addItem(QString("115200"),QSerialPort::Baud115200);
ui->cboDataBit->addItem("8",QSerialPort::Data8);
ui->cboDataBit->addItem("7",QSerialPort::Data7);
ui->cboDataBit->addItem("6",QSerialPort::Data6);
ui->cboDataBit->addItem("5",QSerialPort::Data5);
ui->cboParity->addItem("Odd",QSerialPort::OddParity);
ui->cboParity->addItem("Even",QSerialPort::EvenParity);
ui->cboParity->addItem("None",QSerialPort::NoParity);
ui->cboStopBit->addItem("1",QSerialPort::OneStop);
ui->cboStopBit->addItem("1.5",QSerialPort::OneAndHalfStop);
ui->cboStopBit->addItem("2",QSerialPort::TwoStop);
ui->cboFlowContral->addItem("None",QSerialPort::NoFlowControl);
ui->cboFlowContral->addItem("RTS/CTS",QSerialPort::HardwareControl);
ui->cboFlowContral->addItem("XON/XOFF",QSerialPort::SoftwareControl);
ui->lineEdit->setText("1000");
connect(&m_timer, &QTimer::timeout, this,&MainWindow::timeUp);
}
void MainWindow::initSerialPort()
{
m_serial.moveToThread(&m_thread);
m_thread.start();
connect(this, &MainWindow::sigStart,&m_serial, &serialportplus::startPort);
connect(this, &MainWindow::sigStop,&m_serial, &serialportplus::stopPort);
connect(this, &MainWindow::sigSend,&m_serial, &serialportplus::sendData);
connect(&m_serial, &serialportplus::sigStarted,this, &MainWindow::started);
connect(&m_serial, &serialportplus::sigStop,this, &MainWindow::stoped);
connect(&m_serial, &serialportplus::sigReceived,this, &MainWindow::receiveData);
}
void MainWindow::closeEvent(QCloseEvent *event)
{
Q_UNUSED(event);
qDebug() <<"main" <<QThread::currentThread();
emit sigStop();
m_thread.quit();
m_thread.wait();
}
void MainWindow::on_btnOpenPort_clicked()
{
QString text= ui->btnOpenPort->text();
if(text == QString::fromLocal8Bit("打开串口"))
{
serialportplus::Settings s;
s.name= ui->cboPortName->currentText();
s.baudRate= (QSerialPort::BaudRate)ui->cboBaudrate->currentData().toInt();
s.dataBits = (QSerialPort::DataBits)ui->cboDataBit->currentData().toInt();
s.stopBits= (QSerialPort::StopBits)ui->cboStopBit->currentData().toInt();
s.parity= (QSerialPort::Parity)ui->cboParity->currentData().toInt();
s.flowControl = (QSerialPort::FlowControl)ui->cboFlowContral->currentData().toInt();
emit sigStart(s);
}
else
{
emit sigStop();
}
}
void MainWindow::on_btnSend_clicked()
{
QString strSend = ui->SendplainTextEdit->toPlainText();
QByteArray arr = strSend.toUtf8();
emit sigSend(arr);
}
void MainWindow::started()
{
ui->btnOpenPort->setText(QString::fromLocal8Bit("关闭串口"));
ui->groupBox->setEnabled(false);
}
void MainWindow::stoped(int status)
{
Q_UNUSED(status);
ui->btnOpenPort->setText(QString::fromLocal8Bit("打开串口"));
ui->groupBox->setEnabled(true);
}
void MainWindow::receiveData(QByteArray data)
{
QString strText = QString(data);
QDateTime current_date_time = QDateTime::currentDateTime();
QString t = current_date_time.toString("yyyy-MM-dd hh:mm:ss.zzz : ");
ui->RecveeiveplainTextEdit->appendPlainText( t + strText + "\n" );
}
void MainWindow::on_checkBox_stateChanged(int arg1)
{
if(arg1)
{
m_timer.start(ui->lineEdit->text().toInt());
}
else
{
m_timer.stop();
}
}
void MainWindow::timeUp()
{
qDebug() << "timeup";
on_btnSend_clicked();
}
mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include<QSerialPort>
#include<QDateTime>
#include<QTimer>
#include<QDebug>
#include<QThread>
#include"serialportplus.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void initUI();
void initSerialPort();
void closeEvent(QCloseEvent *event);
private:
Ui::MainWindow *ui;
serialportplus m_serial;
QThread m_thread;
QTimer m_timer;
signals:
void sigStart(serialportplus::Settings s);
void sigStop();
void sigSend(QByteArray data);
public slots:
void started();
void stoped(int status);
void receiveData(QByteArray data);
private slots:
void timeUp();
void on_btnOpenPort_clicked();
void on_btnSend_clicked();
void on_checkBox_stateChanged(int arg1);
};
#endif
serialportplus.cpp
#include "serialportplus.h"
serialportplus::serialportplus()
{
connect(this, &QSerialPort::readyRead, [this]()
{
qDebug() << QString::fromLocal8Bit ("接收") << QThread::currentThread();
QByteArray arr = readAll();
emit sigReceived(arr);
});
}
void serialportplus::startPort(serialportplus::Settings sets)
{
setPortName(sets.name);
setParity(sets.parity);
setBaudRate(sets.baudRate);
setDataBits(sets.dataBits);
setStopBits(sets.stopBits);
setFlowControl(sets.flowControl);
qDebug() << QString::fromLocal8Bit ("启动") <<QThread::currentThread();
if(open(QIODevice::ReadWrite))
{
emit sigStarted();
}
else
{
emit sigStop(1);
}
}
void serialportplus::stopPort()
{
qDebug() << QString::fromLocal8Bit ("停止") <<QThread::currentThread();
if(isOpen())
{
close();
}
emit sigStop(0);
}
void serialportplus::sendData(QByteArray arr)
{
qDebug() << QString::fromLocal8Bit ("发送") <<QThread::currentThread();
if(isOpen())
{
write(arr);
}
}
serialportplus.h
#ifndef SERIALPORTPLUS_H
#define SERIALPORTPLUS_H
#include <QSerialPort>
#include<QThread>
#include<QDebug>
class serialportplus : public QSerialPort
{
Q_OBJECT
public:
serialportplus();
struct Settings
{
QString name;
BaudRate baudRate;
DataBits dataBits;
Parity parity;
StopBits stopBits;
FlowControl flowControl;
};
public slots:
void startPort(Settings sets);
void stopPort();
void sendData(QByteArray arr);
signals:
void sigStarted();
void sigStop(int status);
void sigReceived(QByteArray data);
};
#endif
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)