串口demo

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QSerialPort>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QPushButton>
#include <QLineEdit>
#include <QDebug>
#include <QByteArray>
#include <QThread>
#include <QVector>
#include <array>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    enum Command {
        COMMAND_POWER_SWITCH = 0xC0,
        COMMAND_COLLECT_CHANNEL_SWITCH = 0xC1,
        COMMAND_STIM_CHANNEL_SWITCH = 0xC2,
        COMMAND_STIM_CURRENT_SIZE = 0xC3,
        COMMAND_STIM_INTERVAL = 0xC4,
        COMMAND_PULSE_WIDTH = 0xC5,
        COMMAND_COLLECT_DATA = 0xC6,
        COMMAND_IMPENDENCE_CHECK = 0xC7,
        COMMAND_HEARTBEAT_CONTENT = 0xC8,
        COMMAND_RESTART_OR_UPGRADE = 0xA0,
        COMMAND_SET_SELF_TEST = 0xA3,
        COMMANDM_IMPEDANCE_CALIBRATION = 0xA7,
        COMMAND_READ_FRONT_SERIAL_NUMBER = 0xA9
    };
    void creatGUI();
    void setPortName(QString name);
    void connectDevice(QString name);
    void receiveInfo();
    void sandpack(QByteArray byteArray);
    QByteArray writeCommandByteArray(int num, const QByteArray &data) const;
    void setCollectionChannelSwitch(QString list);
private:
    Ui::Widget *ui;
    uint8_t kZero = 0x00;
    QSerialPort *m_serialport =nullptr;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

#include <Widget.h>
#include <Widget.h>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(600,600);
    m_serialport = new QSerialPort();
    creatGUI();
}

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

void Widget::creatGUI()
{
    QHBoxLayout *all = new QHBoxLayout();
    QVBoxLayout *left = new QVBoxLayout();
    QHBoxLayout *right = new QHBoxLayout();

    QHBoxLayout *first = new QHBoxLayout();
    QPushButton *portNameBtn = new QPushButton();
    portNameBtn->setFixedSize(100,30);
    portNameBtn->setText("portName");

    QLineEdit *portNameEdit = new QLineEdit();
    portNameEdit->setFixedSize(100,30);
    first->setContentsMargins(0,0,0,0);
    first->addStretch();
    first->addWidget(portNameBtn);
    first->addSpacing(5);
    first->addWidget(portNameEdit);
    first->addStretch();

    connect(portNameBtn,&QPushButton::clicked,[this,portNameEdit](){connectDevice(portNameEdit->text());});

    QHBoxLayout *second = new QHBoxLayout();
    QPushButton *portNumBtn = new QPushButton();
    portNumBtn->setFixedSize(100,30);
    portNumBtn->setText("portNum");

    QLineEdit *portNumEdit = new QLineEdit();
    portNumEdit->setFixedSize(100,30);
    portNumEdit->setText("1");
    connect(portNumBtn,&QPushButton::clicked,[this,portNumEdit](){
        connectDevice(portNumEdit->text());
    });

    second->setContentsMargins(0,0,0,0);
    second->addStretch();
    second->addWidget(portNumBtn);
    second->addSpacing(5);
    second->addWidget(portNumEdit);
    second->addStretch();

    left->setContentsMargins(0,0,0,0);
    left->addSpacing(20);
    left->addLayout(first);
    left->addLayout(second);
    left->addStretch();


    right->setContentsMargins(0,0,0,0);

    all->addLayout(left);
    all->addStretch();
    all->addLayout(right);


    this->setLayout(all);
}

void Widget::connectDevice(QString name)
{

    m_serialport->setPortName(name);
    m_serialport->setBaudRate(115200, QSerialPort::AllDirections);
    m_serialport->setDataBits(QSerialPort::Data8);
    m_serialport->setFlowControl(QSerialPort::NoFlowControl);
    m_serialport->setParity(QSerialPort::NoParity);
    m_serialport->setStopBits(QSerialPort::OneStop);

    if (m_serialport) {
        m_serialport->deleteLater();
    }
    connect(m_serialport, &QSerialPort::readyRead, this, &Widget::receiveInfo);

    if (m_serialport) {
        if (m_serialport->isOpen()) {
            m_serialport->close();
        }
        if (!m_serialport->open(QIODevice::ReadWrite)) {
            qDebug() << m_serialport << "open serial port faill!";
        }
    }
}

void Widget::receiveInfo()
{
    auto data = m_serialport->readAll();
    //qDebug() << data;
}

void Widget::sandpack(QByteArray byteArray)
{
    m_serialport->write(byteArray);
    QThread::msleep(200);
}
QByteArray Widget::writeCommandByteArray(int num, const QByteArray& data) const
{
    int dataLength = data.size();
    QByteArray databig(reinterpret_cast<char*>(&dataLength), 2);
    std::reverse(databig.begin(), databig.end());
    QByteArray byteArray;
    byteArray.append(0xEB);
    byteArray.append(0x90);
    byteArray.append(databig);
    byteArray.append(2);
    byteArray.append(0xC1);
    byteArray.append(kZero);
    byteArray.append(0x33);
    byteArray.append(0x33);

    QByteArray dataFlip(data, data.size());
    std::reverse(dataFlip.begin(), dataFlip.end());

    byteArray.append(dataFlip);

    uint16_t sum = 0;
    for (size_t i = 0; i < byteArray.size(); i++) {

        sum = sum + (uint8_t)byteArray.at(i);
    }
    QByteArray checkByteArray(reinterpret_cast<char*>(&sum), 2);
    std::reverse(checkByteArray.begin(), checkByteArray.end());
    byteArray.append(checkByteArray);
    return byteArray;
}
void Widget::setCollectionChannelSwitch(QString list)
{
    QByteArray byteArray;

    switch(list.toInt()){
    case 1:{
        byteArray.append(0x80);
        break;
    }
    case 2:{
        byteArray.append(0xc0);
        break;
    }
    case 3:{
        byteArray.append(0xe0);
        break;
    }
    case 4:{
        byteArray.append(0xf0);
        break;
    }
    case 5:{
        byteArray.append(0xf8);
        break;
    }
    case 6:{
        byteArray.append(0xfc);
        break;
    }
    case 7:{
        byteArray.append(0xfe);
        break;
    }
    case 8:{
        byteArray.append(0xff);
        break;
    }
    };
    sandpack(writeCommandByteArray(0,byteArray));
    //sendPackage(m_nimPacakgeBuilder.writeCollectionChannelSwitch(stringToUint8(kChannelSwitchlist)));
}

#!/bin/sh

chmod 777 /etc/apt/sources.list
cat /dev/null > /etc/apt/sources.list

echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free" >> /etc/apt/sources.list
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free" >> /etc/apt/sources.list
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/sources.list
echo "# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free" >> /etc/apt/source>

chmod 777 /etc/apt/sources.list.d/raspi.list
cat /dev/null > /etc/apt/sources.list.d/raspi.list

echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list.d/raspi.list

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install qtbase5-dev qtchooser
sudo apt-get install qt5-qmake qtbase5-dev-tools
sudo apt-get install qtcreator
sudo apt-get install qtdeclarative5-dev
sudo apt install qml-module-qtquick-controls2
sudo apt install libqt5multimedia*   qtmultimedia5-*
sudo apt-get install libqt5sql5-mysql
sudo apt-get install libqt5serialport5-dev
sudo apt install g++ gcc
sudo apt install cmake
sudo apt install qml-module-qt-labs-platform
sudo apt install qml-module-qtquick-extras
sudo apt install qt.labs.calendar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值