專案實戰:Qt球機控制工具(球機運動八個方向以及運動速度,運動指定角度
需求
注意
Demo演示
除錯工具下載地址
相關標頭檔案
#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
#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_OBJECTpublic: 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
#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_OBJECTpublic: 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
#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_OBJECTpublic: 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2844044/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- WebAssembly Demo之Canvas中隨機運動圓球WebCanvas隨機
- 中國籃球運動發展
- 一個div運動,鍵盤操控的八個方向
- 運動控制
- ABB機械手維修-運動控制
- 運動去手機
- 移動機器人運動規劃及運動模擬機器人
- 籃球組運動組任務(12.19到12.26任務)
- 機器人運動學機器人
- Python+Django+ansible playbook自動化運維專案實戰PythonDjango運維
- 【自動駕駛】運動控制自行車模型運動規律圖解自動駕駛模型圖解
- canvas小球碰壁隨機運動Canvas隨機
- 《球球大作戰》原始碼解析:移動演算法原始碼演算法
- 夏天必備的運動裝備,DTOOM海王運動藍芽耳機OOM藍芽
- 同時運動 + 鏈式運動
- CANopen設計基礎與運動控制運用
- 截止2023年主要網球運動員獲得職業獎金總額
- WPF給控制元件新增運動動畫控制元件動畫
- 小米運動藍芽耳機青春版上手:手機的最佳伴侶兼顧運動、顏值藍芽
- Ansible自動化運維工具運維
- js動畫 Css提供的運動 js提供的運動JS動畫CSS
- 自動化運維工具ansible的實踐運維
- js模擬拋物運動和慣性運動JS
- IT運維之自動化運維運維
- 自動化運維-修改主機名&hosts檔案指令碼運維指令碼
- JavaScript運動框架JavaScript框架
- 運動與健康
- 盤點|AI在機器人運動控制領域應用盤點AI機器人
- IT運維和自動化運維以及運維開發有啥不同?能解釋下嗎?運維
- 演算法-機器人的運動範圍演算法機器人
- JZ-066-機器人的運動範圍機器人
- 尋找伊犁鼠兔,巨人網路《球球大作戰》發起野生動物保護公益行動
- 自動化運維工具Ansible介紹運維
- 活動運營自動化平臺實踐
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- 自動化運維發展趨勢以及好用工具推薦運維
- CSS3元素水平運動指定距離CSSS3
- 買球賽的軟體哪個好 手機線上球賽買球appAPP