项目实战(Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前)

【项目实战(Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前)】一年好景君须记,最是橙黄橘绿时。这篇文章主要讲述项目实战:Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前相关的知识,希望能为你提供帮助。
需求    1.调试球机控制,方向速度,设置到指定的角度;
    2.支持串口,485等基于串口的协议端口配置打开;
    3.子线程串口控制和.子线程协议解析;
    4.支持球机水平运动速度、垂直运动速度设置;
    5.支持球机运动八个方向:上、右上、右、右下、下、左下、左、左上;
    6.支持变倍缩放;
    7.支持变焦距(球机自动对焦则无效)
    8.光圈(球机支持才行)
    9.显示当前球机角度;
    10.设置球机运动到指定的水平位置;
    11.设置球机运动到指定的垂直位置;
< br>
注意    有的球机运动以及一些其他控制指令没有协议返回,理论上有返回,但是球机无返回只有查询协议有返回)。
< br>
Demo演示   

项目实战(Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前)

文章图片

   
项目实战(Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前)

文章图片

   
项目实战(Qt球机控制工具 v1.0.0(球机运动八个方向以及运动速度,设置运动到指定角度,查询当前)

文章图片

调试工具下载地址    CSDN免积分下载:https://download.csdn.net/download/qq21497936/48131428
    QQ群:1047134658(点击“文件”搜索“cameraMove ”,群内与博文同步更新)
相关头文件CameraMoveToolDemo.h
#ifndef CAMERAMOVETOOLDEMO_H #define CAMERAMOVETOOLDEMO_H#include < QWidget> #include < QElapsedTimer> #include "ArrowControlWidget.h" #include "ProtocolPelcoDManager.h"namespace Ui { class CameraMoveToolDemo; }class CameraMoveToolDemo : public QWidget { Q_OBJECTpublic: explicit CameraMoveToolDemo(QWidget *parent = 0); ~CameraMoveToolDemo(); protected: void initControls(); void updateControls(); void queryAngle(); protected slots:// 与方向操作键盘的槽函数 void slot_arrowControlButtonEvent(ArrowControlWidget::DIRECT direct, bool pressed); protected slots:// 串口打开与关闭信号槽 void slot_serialPortOpened(bool result); void slot_serialPortClosed(bool result); protected slots: void slot_event(ProtocolPelcoDManager::EVENT_TYPE eventType, double value); protected: void timerEvent(QTimerEvent *event); private slots:// 按键消息 void on_pushButton_open_clicked(); void on_pushButton_close_clicked(); void on_horizontalSlider_horizalSpeed_valueChanged(int value); void on_horizontalSlider_vertialcaSpeed_valueChanged(int value); void on_pushButton_zoomTele_pressed(); void on_pushButton_zoomTele_released(); void on_pushButton_focusNear_pressed(); void on_pushButton_focusNear_released(); void on_pushButton_irisOpen_pressed(); void on_pushButton_irisOpen_released(); void on_pushButton_zoomWide_pressed(); void on_pushButton_zoomWide_released(); void on_pushButton_focusFar_pressed(); void on_pushButton_focusFar_released(); void on_pushButton_irisClose_pressed(); void on_pushButton_irisClose_released(); void on_pushButton_setHorizalAngle_clicked(); void on_pushButton_verticalAngle_clicked(); private: Ui::CameraMoveToolDemo *ui; private: int _timerId; int _queryIntervalMs; }; #endif // CAMERAMOVETOOLDEMO_H

ArrowControlWidget.h
#ifndef ARROWCONTROLWIDGET_H #define ARROWCONTROLWIDGET_H/**********************************************************************\\ * 类名: ArrowControlWidget * 说明: 方向键盘按键 * 著作权信息 *作者:红胖子(AAA红模仿) *公司:长沙红胖子网络科技有限公司 *网址:hpzwl.blog.csdn.net *联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813) * 版本信息 *日期版本描述 *2021年11月23日v1.0.0基础功能 \\**********************************************************************/#include < QWidget> #include < QPushButton> namespace Ui { class ArrowControlWidget; }class ArrowControlWidget : public QWidget { Q_OBJECT public: enum DIRECT {// 方向 DIRECT_STOP = 0x00, DIRECT_UP, DIRECT_RIGHT_UP, DIRECT_RIGHT, DIRECT_RIGHT_DOWN,DIRECT_DOWN, DIRECT_LEFT_DOWN, DIRECT_LEFT, DIRECT_LEFT_UP, }; public: explicit ArrowControlWidget(QWidget *parent = 0); ~ArrowControlWidget(); signals: void signal_buttonEvent(ArrowControlWidget::DIRECT direct, bool pressed); // 不是true - pressed,就是false - releaseprotected: void initControls(); private slots: void slot_buttonPressed(); void slot_buttonRelease(); private: Ui::ArrowControlWidget *ui; private: QHash< QPushButton*, ArrowControlWidget::DIRECT> _hashPushButton2Direct; }; #endif // ARROWCONTROLWIDGET_H

SerialPortManager.h
#ifndef SERIALPORTMANAGER_H #defineSERIALPORTMANAGER_H/**********************************************************************\\ * 类名: SerialPortManager * 说明: 串口相关操作 * 信号: *void signal_recevData(QByteArray byteArray) -- 抛出收到的数据 *void signal_error(int err) -- 抛出错误信息 * 成员函数: *bool isRunning() -- 是否已经在运行 *void serialError(QSerialPort::SerialPortError) -- 错误接受槽函数 * 线程函数: *void slot_start() -- 开始运行 *void slot_stop() -- 停止运行 * 部分函数: *QStringList getAllSerialPortNames() -- 获取所有串口 *QString getPortName() -- 获取当前串口设备名称 *void setPortName() -- 设置当前串口设备名称 *void slot_open() -- 打开串口 *void slot_close() -- 关闭串口 *void slot_sendData(QByteArray byteArray) -- 发送数据 *void setPortName(QString name) -- 设置串口名称,如"com1"(windows),"/dev/ttyS0"(linux) *void setSerialPortSettings(SerialPortSettings& serialPortSettings) -- 配置串口相关参数 * 著作权信息 *作者:红胖子(AAA红模仿) *公司:长沙红胖子网络科技有限公司 *网址:hpzwl.blog.csdn.net *联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813) * 版本信息 *日期版本描述 *2016年11月11日v1.0.0基础功能 *2019年06月02日v1.1.0增加串口默认初始化参数“9600,8,无奇偶,1,noFlow",增加设置获取设备名,增加获取所有串口名 *2020年07月06日v1.2.0修改模块名称,规划代码 *2020年07月08日v1.3.0唯一实例类 *2021年11月23日v1.4.0整理代码,增加设置单项配置串口信息枚举,增加单项设置波特率数字和字符串(如9600,"N","1"等) \\**********************************************************************/#include < QObject> #include < QSerialPort> #include < QSerialPortInfo> #include < QDebug> #include < QMutex> class SerialPortManager : public QObject { Q_OBJECT public: struct SerialPortSettings{ SerialPortSettings(): baudRate(QSerialPort::Baud9600), dataBits(QSerialPort::Data8), parity(QSerialPort::NoParity), stopBit(QSerialPort::OneStop), flowControl(QSerialPort::NoFlowControl) { } QSerialPort::BaudRate baudRate; QSerialPort::DataBits dataBits; QSerialPort::Parity parity; QSerialPort::StopBits stopBit; QSerialPort::FlowControl flowControl; }; private: explicit SerialPortManager(QObject *parent = 0); public: ~SerialPortManager(); public: static SerialPortManager *getInstance(); public: bool getRunning() const; // 当前线程是否运行 bool getOpened() const; // 串口是非都开 QString getPortName(); // 获取串口名 SerialPortSettings getSerialPortSettings() const; // 获取串口配置信息public: void setPortName(QString name); // 设置串口名称 void setSerialPortSettings(SerialPortSettings & serialPortSettings); // 设置串口配置信息(一次性) void setBaudRate(QSerialPort::BaudRate baudRate); // 设置串口波特率 void setBaudRate(int baudRate); // 设置串口波特率 void setDateBits(QSerialPort::DataBits dataBits); // 设置数据位 void setDateBits(int dateBits); // 设置数据位 void setParity(QSerialPort::Parity parity); // 设置校验方式 void setParity(QString parity); // 设置校验方式 void setStopBit(QSerialPort::StopBits stopBits); // 设置停止位 void setStopBit(QString stopBits); // 设置停止位 void setFlowControl(QSerialPort::FlowControl flowControl); // 设置硬件流控制public: static QStringList getAllSerialPortNames(); signals: void signal_opened(bool result); // 打开信号 void signal_closed(bool result); // 关闭信号 void signal_recevData(QByteArray byteArray); // 接收数据信号 void signal_error(int err); // 错误代码public: void open(QString portName = QString()); // 打开串口(抛送到串口线程) void close(); // 关闭串口(抛送到串口线程)public: void sendData(QByteArray byteArray); // 发送数据(抛送到串口线程)public slots: void slot_start(); // 线程开启 void slot_stop(); // 线程停止 void slot_open(QString portName = QString()); // 线程打开 void slot_close(); // 线程关闭 void slot_sendData(QByteArray byteArray); // 发送数据protected: void initControls(); // 初始化protected slots: void slot_recv(); // 接收数据 void slot_serialError(QSerialPort::SerialPortError); // 接收锁雾private: static SerialPortManager *_pInstance; static QMutex _mutex; private: bool _running; // 是否正在运行 QSerialPort *_pSerialPort; // 串口指针 SerialPortSettings _serialPortSettings; // 串口设置信息private: bool _opened; // 串口是否打开 QString _portName; // 串口名称int _id; }; #endif // SEARIALPORT_H

ProtocolPelcoDManager.h
#ifndef PROTOCOLPALCODMANAGER_H #define PROTOCOLPALCODMANAGER_H/**********************************************************************\\ * 类名: ProtocolPelcoDManager * 说明: pelco-D协议组装和解析类 * 线程函数: *void slot_start() -- 开始运行 *void slot_stop() -- 停止运行 * 著作权信息 *作者:红胖子(AAA红模仿) *公司:长沙红胖子网络科技有限公司 *网址:hpzwl.blog.csdn.net *联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813) * 版本信息 *日期版本描述 *2021年11月24日v1.0.0基础功能 \\**********************************************************************/#include < QObject> #include < QMutex> #include < QJsonArray> #include < QJsonObject> #include < QJsonDocument> #include < QDebug> #include < QDateTime> class ProtocolPelcoDManager : public QObject { Q_OBJECT public: enum EVENT_TYPE { EVENT_TYPE_HORIZAL_ANGLE = 0x00, EVENT_TYPE_VERTICAL_ANGLE, }; private: explicit ProtocolPelcoDManager(QObject *parent = 0); public: static ProtocolPelcoDManager *getInstance(); // 获取实例public: int getAddr() const; public: void setAddr(int addr); signals: void signal_event(ProtocolPelcoDManager::EVENT_TYPE eventType, double value); public:// 移动方向指令: 上、下、左、右 QByteArray constructMoveUpProtocol(int verticalSpeed = 0x20, int addr = -1); QByteArray constructMoveRightProtocol(int horizalSpeed= 0x20, int addr = -1); QByteArray constructMoveDownProtocol (int verticalSpeed = 0x20, int addr = -1); QByteArray constructMoveLeftProtocol (int horizalSpeed= 0x20, int addr = -1); // 移动方向指令:左上、左下、右上、右下 QByteArray constructMoveRightUpProtocol(int horizalSpeed = 0x20, int verticalSpeed = 0x20, int addr = -1); QByteArray constructMoveRightDownProtocol(int horizalSpeed = 0x20, int verticalSpeed = 0x20, int addr = -1); QByteArray constructMoveLeftDownProtocol (int horizalSpeed = 0x20, int verticalSpeed = 0x20, int addr = -1); QByteArray constructMoveLeftUpProtocol(int horizalSpeed = 0x20, int verticalSpeed = 0x20, int addr = -1); // 变倍小、大 QByteArray constructZoomWideProtocol(int addr = -1); QByteArray constructZoomTeleProtocol(int addr = -1); // 聚焦近、远 QByteArray constructFocusNearProtocol(int addr = -1); QByteArray constructFocusFarWideProtocol(int addr = -1); // 光圈开、关 QByteArray constructIrisOpenProtocol(int addr = -1); QByteArray constructIrisCloseProtocol(int addr = -1); // 查询水平角度、垂直角度 QByteArray constructQueryHorizalProtocol(int addr = -1); QByteArray constructQueryVerticalProtocol(int addr = -1); // 设置水平角度、垂直角度 QByteArray constructSetHorizalProtocol(double angle, int addr = -1); QByteArray constructSetVerticalProtocol(double angle, int addr = -1); public: QByteArray constructStopProtocol(int addr = -1); public slots: void slot_start(); // 线程开始 void slot_stop(); // 线程停止public slots: void slot_recvProtocol(QByteArray byteArray); // 协议接收入口public: static void sendProtocol(QByteArray byteArray); // 发送协议(目前为空,根据使用时是否绑定串口设计)protected: QByteArray constructCtrlProtocol(char addr, char cmnd1, char cmnd2, char horizalSpeed, char veritalSpeed); private: static ProtocolPelcoDManager *_pInstance; static QMutex _mutex; private: bool _running; // 线程是否在运行private: int _addr; }; #endif // PROTOCOLPALCODMANAGER_H

< br>
若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/121512987

    推荐阅读