女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【飛凌OKA40i-C開發板試用體驗】QT實現串口助手

開發板試用精選 ? 來源:開發板試用 ? 作者:電子發燒友論壇 ? 2022-10-19 11:21 ? 次閱讀

本文來源電子發燒友社區,作者:劉建華, 帖子地址:https://bbs.elecfans.com/jishu_2308758_1_1.html


【目的】用QT實現一個串口助手。
因為我的項目是需要用到485接口來控制伺服電機的,所以掌握QT的串口收發是必需的。經過幾天的學習從?Qt----Serial Port_冷月楓啊的博客-CSDN博客_qt serialport學習到了qtserialport的知識。現在分享如下:
1、用qtcreator新建空白項目:
image.png
2、在qtserial_demo.h上增加serialport
QT += core gui serialport
3、編寫mainwindow.h,內容如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    //Ui::MainWindow *ui;
    /* 串口對象 */
    QSerialPort *serialPort;
    /* 用作接收數據 */
    QTextBrowser *textBrowser;
    /* 用作發送數據 */
    QTextEdit *textEdit;
    /* 按鈕 */
    QPushButton *pushButton[2];
    /* 下拉選擇盒子 */
    QComboBox *comboBox[5];
    /* 標簽 */
    QLabel *label[5];
    /* 垂直布局 */
    QVBoxLayout *vboxLayout;
    /* 網絡布局 */
    QGridLayout *gridLayout;
    /* 主布局 */
    QWidget *mainWidget;

     /* 設置功能區域 */
    QWidget *funcWidget;
     /* 布局初始化 */
     void layoutInit();
     /* 掃描系統可用串口 */
    void scanSerialPort();

     /* 波特率項初始化 */
     void baudRateItemInit();

    /* 數據位項初始化 */
    void dataBitsItemInit();

     /* 檢驗位項初始化 */
    void parityItemInit();

     /* 停止位項初始化 */
    void stopBitsItemInit();

    private slots:
    void sendPushButtonClicked();
    void openSerialPortPushButtonClicked();
    void serialPortReadyRead();
};

#endif // MAINWINDOW_H

4、編寫mainwindow.cpp內容如下:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 布局初始化 */
    layoutInit();

    /* 掃描系統的串口 */
    scanSerialPort();

    /* 波特率項初始化 */
    baudRateItemInit();

    /* 數據位項初始化 */
    dataBitsItemInit();

    /* 檢驗位項初始化 */
    parityItemInit();

    /* 停止位項初始化 */
    stopBitsItemInit();

}

void MainWindow::layoutInit()
{
    /* 獲取屏幕的分辨率,Qt 官方建議使用這
    * 種方法獲取屏幕分辨率,防上多屏設備導致對應不上
    * 注意,這是獲取整個桌面系統的分辨率
    */
    QList  list_screen = QGuiApplication::screens();
    /* 如果是 ARM 平臺,直接設置大小為屏幕的大小 */
    #if __arm__
     /* 重設大小 */
    this->resize(list_screen.at(0)->geometry().width(),
     list_screen.at(0)->geometry().height());
    #else
    /* 否則則設置主窗體大小為 800x480 */
    this->resize(800, 600);
    #endif
    /* 初始化 */
    serialPort = new QSerialPort(this);
    textBrowser = new QTextBrowser();
    textEdit = new QTextEdit();
    vboxLayout = new QVBoxLayout();
    funcWidget = new QWidget();
    mainWidget = new QWidget();
    gridLayout = new QGridLayout();
    /* QList 鏈表,字符串類型 */
    QList  list1;
    list1<<"串口號:"<<"波特率:"<<"數據位:"<<"檢驗位:"<<"停止位:";
    for (int i = 0; i < 5; i++){
        label[i] = new QLabel(list1[i]);
        /* 設置最小寬度與高度 */
        label[i]->setMinimumSize(80, 30);
        /* 自動調整 label 的大小 */
        label[i]->setSizePolicy(
                    QSizePolicy::Expanding,
                    QSizePolicy::Expanding
                    );
         /* 將 label[i]添加至網格的坐標(0, i) */
        gridLayout->addWidget(label[i], 0, i);
    }
    for (int i = 0; i < 5; i++) {
        comboBox[i] = new QComboBox();
        comboBox[i]->setMinimumSize(80, 30);
        /* 自動調整 label 的大小 */
        comboBox[i]->setSizePolicy(
        QSizePolicy::Expanding,
        QSizePolicy::Expanding
    );
    /* 將 comboBox[i]添加至網格的坐標(1, i) */
     gridLayout->addWidget(comboBox[i], 1, i);
    }
    /* QList 鏈表,字符串類型 */
    QList  list2;
    list2<<"發送"<<"打開串口";
    for (int i = 0; i < 2; i++) {
         pushButton[i] = new QPushButton(list2[i]);
         pushButton[i]->setMinimumSize(80, 30);
         /* 自動調整 label 的大小 */
         pushButton[i]->setSizePolicy(
         QSizePolicy::Expanding,
         QSizePolicy::Expanding
        );
         /* 將 pushButton[0]添加至網格的坐標(i, 5) */
        gridLayout->addWidget(pushButton[i], i, 5);
    }
    pushButton[0]->setEnabled(false);

    /* 布局 */
    vboxLayout->addWidget(textBrowser);
    vboxLayout->addWidget(textEdit);
    funcWidget->setLayout(gridLayout);
    vboxLayout->addWidget(funcWidget);
    mainWidget->setLayout(vboxLayout);
    this->setCentralWidget(mainWidget);

    /* 占位文本 */
    textBrowser->setPlaceholderText("接收到的消息");
    textEdit->setText("www.openedv.com");

    /* 信號槽連接 */
    connect(pushButton[0], SIGNAL(clicked()),
    this, SLOT(sendPushButtonClicked()));
    connect(pushButton[1], SIGNAL(clicked()),
    this, SLOT(openSerialPortPushButtonClicked()));

    connect(serialPort, SIGNAL(readyRead()),
    this, SLOT(serialPortReadyRead()));
}

void MainWindow::scanSerialPort()
 {
    /* 查找可用串口 */
    foreach (const QSerialPortInfo &info,
     QSerialPortInfo::availablePorts()) {
         comboBox[0]->addItem(info.portName());
     }
 }

void MainWindow::baudRateItemInit()
 {
 /* QList 鏈表,字符串類型 */
 QList list;
 list<<"1200"<<"2400"<<"4800"<<"9600"
 <<"19200"<<"38400"<<"57600"
 <<"115200"<<"230400"<<"460800"
 <<"921600";
 for (int i = 0; i < 11; i++) {
    comboBox[1]->addItem(list[i]);
 }
 comboBox[1]->setCurrentIndex(7);
}

void MainWindow::dataBitsItemInit()
{
 /* QList 鏈表,字符串類型 */
    QList list;
    list<<"5"<<"6"<<"7"<<"8";
     for (int i = 0; i < 4; i++) {
        comboBox[2]->addItem(list[i]);
     }
    comboBox[2]->setCurrentIndex(3);
}
void MainWindow::parityItemInit()
 {
     /* QList 鏈表,字符串類型 */
     QList list;
     list<<"None"<<"Even"<<"Odd"<<"Space"<<"Mark";
     for (int i = 0; i < 5; i++) {
        comboBox[3]->addItem(list[i]);
     }
    comboBox[3]->setCurrentIndex(0);
 }

void MainWindow::stopBitsItemInit()
 {
 /* QList 鏈表,字符串類型 */
 QList list;
 list<<"1"<<"2";
 for (int i = 0; i < 2; i++) {
 comboBox[4]->addItem(list[i]);
 }
 comboBox[4]->setCurrentIndex(0);
 }

void MainWindow::sendPushButtonClicked()
 {
 /* 獲取 textEdit 數據,轉換成 utf8 格式的字節流 */
 QByteArray data = textEdit->toPlainText().toUtf8();
 serialPort->write(data);
 }

void MainWindow::openSerialPortPushButtonClicked()
 {
 if (pushButton[1]->text() == "打開串口") {
 /* 設置串口名 */
 serialPort->setPortName(comboBox[0]->currentText());
 /* 設置波特率 */
 serialPort->setBaudRate(comboBox[1]->currentText().toInt());
 /* 設置數據位數 */
 switch (comboBox[2]->currentText().toInt()) {
 case 5:
 serialPort->setDataBits(QSerialPort::Data5);
 break;
 case 6:
 serialPort->setDataBits(QSerialPort::Data6);
 break;
 case 7:
 serialPort->setDataBits(QSerialPort::Data7);
 break;
 case 8:
 serialPort->setDataBits(QSerialPort::Data8);
 break;
 default: break;
 }
 /* 設置奇偶校驗 */
 switch (comboBox[3]->currentIndex()) {
 case 0:
 serialPort->setParity(QSerialPort::NoParity);
 break;
 case 1:
 serialPort->setParity(QSerialPort::EvenParity);
 break;
 case 2:
 serialPort->setParity(QSerialPort::OddParity);
 break;
 case 3:
 serialPort->setParity(QSerialPort::SpaceParity);
 break;
 case 4:
 serialPort->setParity(QSerialPort::MarkParity);
 break;
 default: break;
 }
 /* 設置停止位 */
 switch (comboBox[4]->currentText().toInt()) {
 case 1:
 serialPort->setStopBits(QSerialPort::OneStop);
 break;
 case 2:
 serialPort->setStopBits(QSerialPort::TwoStop);
 break;
 default: break;
 }
 /* 設置流控制 */
 serialPort->setFlowControl(QSerialPort::NoFlowControl);
 if (!serialPort->open(QIODevice::ReadWrite))
 QMessageBox::about(NULL, "錯誤",
 "串口無法打開!可能串口已經被占用!");
 else {
 for (int i = 0; i < 5; i++)
 comboBox[i]->setEnabled(false);
 pushButton[1]->setText("關閉串口");
 pushButton[0]->setEnabled(true);
 }
 } else {
 serialPort->close();
 for (int i = 0; i < 5; i++)
 comboBox[i]->setEnabled(true);
 pushButton[1]->setText("打開串口");
 pushButton[0]->setEnabled(false);
 }
}

void MainWindow::serialPortReadyRead()
 {
 /* 接收緩沖區中讀取數據 */
 QByteArray buf = serialPort->readAll();
 textBrowser->insertPlainText(QString(buf));
 }


MainWindow::~MainWindow()
{

}

4、代碼帖完后編譯通過,在目錄工程的同級目錄下生成build_qtserial_demo-arm-debug文件夾。
image.png
5、將可執行文件qtserial_demo拷到開發板

forlinx@forlinx:~/work/qtserial_demo/build-qtserial_demo-arm-Debug$ scp qtserial_demo root@192.168.3.168:/home/qtserial_demo
The authenticity of host '192.168.3.168 (192.168.3.168)' can't be established.
ECDSA key fingerprint is SHA256:WfJF3iuWeOnNl+KyM52kBLDLoRFcFhRDOm01a4NrZoA.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added '192.168.3.168' (ECDSA) to the list of known hosts.
[email protected]'s password: 
qtserial_demo                                 100%  971KB  10.6MB/s   00:00

6、開發板上修改文件權限后執行
image.png
9ffa537aca975c2988d71999479aa24.jpg
image.png

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 飛凌
    +關注

    關注

    0

    文章

    134

    瀏覽量

    16387
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    5分鐘學會網絡服務搭建,i.MX9352 + Linux 6.1實戰示例

    本文將以嵌入式OK-MX9352-C開發板(搭載了在工業物聯網領域廣泛應用的NXP i.MX9352處理器)為平臺,介紹如何在Linux
    的頭像 發表于 05-30 11:08 ?532次閱讀
    5分鐘學會網絡服務搭建,<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>i</b>.MX9352 + Linux 6.1實戰示例

    【評測試用】合眾HZ-T536開發板免費試用體驗

    【評測試用】合眾HZ-T536開發板免費試用體驗
    的頭像 發表于 05-27 08:05 ?53次閱讀
    【評測<b class='flag-5'>試用</b>】合眾HZ-T536<b class='flag-5'>開發板</b>免費<b class='flag-5'>試用</b>體驗

    基于RK3576開發板QT GUI例程

    EASYEAI Orin-Nano開發板搭載了帶有xfce桌面環境的Debian系統,支持Qt應用程序的開發和運行。開發板采用RK3576 CPU,性能強大,可直接在
    的頭像 發表于 05-14 10:26 ?552次閱讀
    基于RK3576<b class='flag-5'>開發板</b>的<b class='flag-5'>QT</b> GUI例程

    有獎試用!!RA-Eco-RA4M2-100PIN-V1.0開發板試用活動報名

    RA-Eco-RA4M2-100PIN-V1.0開發板試用活動
    的頭像 發表于 03-13 12:10 ?406次閱讀
    有獎<b class='flag-5'>試用</b>!!RA-Eco-RA4M2-100PIN-V1.0<b class='flag-5'>開發板</b><b class='flag-5'>試用</b>活動報名

    3.1s啟動!嵌入式i.MX93開發板部署LVGL,打造更高效的GUI

    近期,嵌入式為基于NXP i.MX93系列處理器打造的OK-MX9352-C開發板成功移植了LVGL v8.3,不僅界面美觀精致,啟動速
    的頭像 發表于 01-16 11:52 ?596次閱讀
    3.1s啟動!<b class='flag-5'>飛</b><b class='flag-5'>凌</b>嵌入式<b class='flag-5'>i</b>.MX93<b class='flag-5'>開發板</b>部署LVGL,打造更高效的GUI

    嵌入式OK3588J-C開發板體驗】OK3588J-C開發板QT環境安裝

    明明使用的是開發板,為什么要選擇的是Desktop,這是因為我們的開發板實現在就已經相當于是桌面系統了,與我們使用的x86個人電腦使用起來是相同的,我們在x86電腦上面開發,然后再給
    發表于 12-28 18:20

    嵌入式OK3588J-C開發板體驗】OK3588J-C開發板開箱評測

    用料的誠意滿滿! 里面搭配一個12V 2A的充電適配器,接通開發板,插上網線和USB type-C 串口, 打開電腦上的串口調試
    發表于 12-04 15:23

    嵌入式受邀亮相OpenHarmony人才生態大會

    出席,并展示了其在OpenHarmony 4.1系統適配方面的最新成果。 在大會的靜態展示區域,嵌入式攜兩款明星產品OK3568-C開發板和OK527N-
    的頭像 發表于 11-29 16:47 ?402次閱讀
    <b class='flag-5'>飛</b><b class='flag-5'>凌</b>嵌入式受邀亮相OpenHarmony人才生態大會

    嵌入式OK3576-C開發板體驗】開箱報告

    簡介 很榮幸參與到本次由嵌入式和電子發燒友提供的OK3576-C開發板試用機會。
    發表于 08-22 02:13

    嵌入式OK527N-C開發板體驗】4. mpp與播放器+ubuntusdk qt環境搭建

    系統使用linux+qt開發模式,還是想試下這個方式下的程序編寫。 不過 文檔中提到 的可以直接 打開的vm鏡像,我是沒有找到,登錄了官網,也沒有找到對應的下載 連接 網站上也沒
    發表于 07-27 14:59

    嵌入式OK527N-C開發板體驗】- 1. 開箱

    周三左右就收到了快遞,一直忙其他的事情,沒時間弄這個,就拖到周末了。 首先發個開箱貼,記錄下。 外包裝,盒子比想象的要大不少。 附帶的產品手冊,里面有很多
    發表于 07-11 21:24

    嵌入式OK527N-C開發板體驗】-c函數中進行wifi連接

    開發板,在串口界面執行命令并打印log。 我將其推送到了/home/forlinx目錄下。 在該目錄下執行如下命令,即可運行app程序了 chmod +x app ./app 至此完成初步實驗,可以在c程序中進行wifi連
    發表于 07-06 21:11

    嵌入式OK527N-C開發板體驗】- 開箱

    周三左右就收到了快遞,一直忙其他的事情,沒時間弄這個,就拖到周末了。 首先發個開箱貼,記錄下。 外包裝,盒子比想象的要大不少。 附帶的產品手冊,里面有很多
    發表于 06-30 23:04

    點擊參與米爾NXP i.MX 93開發板有獎試用

    米爾與NXP合作發布的新品基于NXPi.MX93應用處理器的MYD-LMX9X開發板免費試用活動來啦~~米爾提供了3塊價值678元的MYD-LMX9X開發板發起試用活動您不僅可以免費體
    的頭像 發表于 06-13 08:02 ?857次閱讀
    點擊參與米爾NXP <b class='flag-5'>i</b>.MX 93<b class='flag-5'>開發板</b>有獎<b class='flag-5'>試用</b>

    米爾NXP i.MX 93開發板Qt開發指南

    1.概述Qt是一個跨平臺的圖形應用開發框架,被應用在不同尺寸設備和平臺上,同時提供不同版權版本供用戶選擇。米爾NXPi.MX93開發板(MYD-LMX9X開發板)使用
    的頭像 發表于 06-07 08:01 ?2137次閱讀
    米爾NXP <b class='flag-5'>i</b>.MX 93<b class='flag-5'>開發板</b>的<b class='flag-5'>Qt</b><b class='flag-5'>開發</b>指南