18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【飛凌OKA40i-C開(kāi)發(fā)板試用體驗(yàn)】QT實(shí)現(xiàn)串口助手

開(kāi)發(fā)板試用精選 ? 來(lái)源:開(kāi)發(fā)板試用 ? 作者:電子發(fā)燒友論壇 ? 2022-10-19 11:21 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文來(lái)源電子發(fā)燒友社區(qū),作者:劉建華, 帖子地址:https://bbs.elecfans.com/jishu_2308758_1_1.html


【目的】用QT實(shí)現(xiàn)一個(gè)串口助手。
因?yàn)槲业捻?xiàng)目是需要用到485接口來(lái)控制伺服電機(jī)的,所以掌握QT的串口收發(fā)是必需的。經(jīng)過(guò)幾天的學(xué)習(xí)從?Qt----Serial Port_冷月楓啊的博客-CSDN博客_qt serialport學(xué)習(xí)到了qtserialport的知識(shí)。現(xiàn)在分享如下:
1、用qtcreator新建空白項(xiàng)目:
image.png
2、在qtserial_demo.h上增加serialport
QT += core gui serialport
3、編寫(xiě)mainwindow.h,內(nèi)容如下:

#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;
    /* 串口對(duì)象 */
    QSerialPort *serialPort;
    /* 用作接收數(shù)據(jù) */
    QTextBrowser *textBrowser;
    /* 用作發(fā)送數(shù)據(jù) */
    QTextEdit *textEdit;
    /* 按鈕 */
    QPushButton *pushButton[2];
    /* 下拉選擇盒子 */
    QComboBox *comboBox[5];
    /* 標(biāo)簽 */
    QLabel *label[5];
    /* 垂直布局 */
    QVBoxLayout *vboxLayout;
    /* 網(wǎng)絡(luò)布局 */
    QGridLayout *gridLayout;
    /* 主布局 */
    QWidget *mainWidget;

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

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

    /* 數(shù)據(jù)位項(xiàng)初始化 */
    void dataBitsItemInit();

     /* 檢驗(yàn)位項(xiàng)初始化 */
    void parityItemInit();

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

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

#endif // MAINWINDOW_H

4、編寫(xiě)mainwindow.cpp內(nèi)容如下:

#include "mainwindow.h"

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

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

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

    /* 數(shù)據(jù)位項(xiàng)初始化 */
    dataBitsItemInit();

    /* 檢驗(yàn)位項(xiàng)初始化 */
    parityItemInit();

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

}

void MainWindow::layoutInit()
{
    /* 獲取屏幕的分辨率,Qt 官方建議使用這
    * 種方法獲取屏幕分辨率,防上多屏設(shè)備導(dǎo)致對(duì)應(yīng)不上
    * 注意,這是獲取整個(gè)桌面系統(tǒng)的分辨率
    */
    QList  list_screen = QGuiApplication::screens();
    /* 如果是 ARM 平臺(tái),直接設(shè)置大小為屏幕的大小 */
    #if __arm__
     /* 重設(shè)大小 */
    this->resize(list_screen.at(0)->geometry().width(),
     list_screen.at(0)->geometry().height());
    #else
    /* 否則則設(shè)置主窗體大小為 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<<"串口號(hào):"<<"波特率:"<<"數(shù)據(jù)位:"<<"檢驗(yàn)位:"<<"停止位:";
    for (int i = 0; i < 5; i++){
        label[i] = new QLabel(list1[i]);
        /* 設(shè)置最小寬度與高度 */
        label[i]->setMinimumSize(80, 30);
        /* 自動(dòng)調(diào)整 label 的大小 */
        label[i]->setSizePolicy(
                    QSizePolicy::Expanding,
                    QSizePolicy::Expanding
                    );
         /* 將 label[i]添加至網(wǎng)格的坐標(biāo)(0, i) */
        gridLayout->addWidget(label[i], 0, i);
    }
    for (int i = 0; i < 5; i++) {
        comboBox[i] = new QComboBox();
        comboBox[i]->setMinimumSize(80, 30);
        /* 自動(dòng)調(diào)整 label 的大小 */
        comboBox[i]->setSizePolicy(
        QSizePolicy::Expanding,
        QSizePolicy::Expanding
    );
    /* 將 comboBox[i]添加至網(wǎng)格的坐標(biāo)(1, i) */
     gridLayout->addWidget(comboBox[i], 1, i);
    }
    /* QList 鏈表,字符串類型 */
    QList  list2;
    list2<<"發(fā)送"<<"打開(kāi)串口";
    for (int i = 0; i < 2; i++) {
         pushButton[i] = new QPushButton(list2[i]);
         pushButton[i]->setMinimumSize(80, 30);
         /* 自動(dòng)調(diào)整 label 的大小 */
         pushButton[i]->setSizePolicy(
         QSizePolicy::Expanding,
         QSizePolicy::Expanding
        );
         /* 將 pushButton[0]添加至網(wǎng)格的坐標(biāo)(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");

    /* 信號(hào)槽連接 */
    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 數(shù)據(jù),轉(zhuǎn)換成 utf8 格式的字節(jié)流 */
 QByteArray data = textEdit->toPlainText().toUtf8();
 serialPort->write(data);
 }

void MainWindow::openSerialPortPushButtonClicked()
 {
 if (pushButton[1]->text() == "打開(kāi)串口") {
 /* 設(shè)置串口名 */
 serialPort->setPortName(comboBox[0]->currentText());
 /* 設(shè)置波特率 */
 serialPort->setBaudRate(comboBox[1]->currentText().toInt());
 /* 設(shè)置數(shù)據(jù)位數(shù) */
 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;
 }
 /* 設(shè)置奇偶校驗(yàn) */
 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;
 }
 /* 設(shè)置停止位 */
 switch (comboBox[4]->currentText().toInt()) {
 case 1:
 serialPort->setStopBits(QSerialPort::OneStop);
 break;
 case 2:
 serialPort->setStopBits(QSerialPort::TwoStop);
 break;
 default: break;
 }
 /* 設(shè)置流控制 */
 serialPort->setFlowControl(QSerialPort::NoFlowControl);
 if (!serialPort->open(QIODevice::ReadWrite))
 QMessageBox::about(NULL, "錯(cuò)誤",
 "串口無(wú)法打開(kāi)!可能串口已經(jīng)被占用!");
 else {
 for (int i = 0; i < 5; i++)
 comboBox[i]->setEnabled(false);
 pushButton[1]->setText("關(guān)閉串口");
 pushButton[0]->setEnabled(true);
 }
 } else {
 serialPort->close();
 for (int i = 0; i < 5; i++)
 comboBox[i]->setEnabled(true);
 pushButton[1]->setText("打開(kāi)串口");
 pushButton[0]->setEnabled(false);
 }
}

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


MainWindow::~MainWindow()
{

}

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

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.
root@192.168.3.168's password: 
qtserial_demo                                 100%  971KB  10.6MB/s   00:00

6、開(kāi)發(fā)板上修改文件權(quán)限后執(zhí)行
image.png
9ffa537aca975c2988d71999479aa24.jpg
image.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 飛凌
    +關(guān)注

    關(guān)注

    0

    文章

    135

    瀏覽量

    16753
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    OK-MX9596-C開(kāi)發(fā)板試用】②體驗(yàn)WIFI、藍(lán)牙、音頻、視頻,為AI應(yīng)用打下基礎(chǔ)

    OK-MX9596-C開(kāi)發(fā)板試用】①開(kāi)箱圖賞、跑分測(cè)試、yolo大模型三箭齊發(fā) -
    發(fā)表于 10-21 18:17

    RK3506開(kāi)發(fā)板QT Creator開(kāi)發(fā)手冊(cè),交叉編譯工具鏈與QT應(yīng)用示例,入門(mén)必備

    本文基于觸覺(jué)智能RK3506核心/開(kāi)發(fā)板介紹QTCreator交叉編譯配置與QT應(yīng)用示例。如需購(gòu)買(mǎi)開(kāi)發(fā)板進(jìn)行評(píng)估驗(yàn)證簡(jiǎn)介QTCreatorQtCreator?是由TheQtCompa
    的頭像 發(fā)表于 09-30 16:26 ?2947次閱讀
    RK3506<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>QT</b> Creator<b class='flag-5'>開(kāi)發(fā)</b>手冊(cè),交叉編譯工具鏈與<b class='flag-5'>QT</b>應(yīng)用示例,入門(mén)必備

    【作品合集】嵌入式OK527N-C開(kāi)發(fā)板測(cè)評(píng)

    針對(duì)不同的功能做了深度優(yōu)化,方便用戶二次開(kāi)發(fā)的同時(shí)簡(jiǎn)化用戶設(shè)計(jì),為您的項(xiàng)目提供良好的評(píng)估及設(shè)計(jì)依據(jù)。 活動(dòng)詳情地址:OK527N-C開(kāi)發(fā)板
    發(fā)表于 09-22 15:54

    送啦!嵌入式聯(lián)合NXP邀您參加OK-MX9596-C開(kāi)發(fā)板試用活動(dòng)

    送啦!嵌入式聯(lián)合NXP邀您參加OK-MX9596-C開(kāi)發(fā)板試用活動(dòng)
    的頭像 發(fā)表于 08-22 08:03 ?560次閱讀
    送啦!<b class='flag-5'>飛</b><b class='flag-5'>凌</b>嵌入式聯(lián)合NXP邀您參加OK-MX9596-<b class='flag-5'>C</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>試用</b>活動(dòng)

    T527N開(kāi)發(fā)板試用QT應(yīng)用開(kāi)發(fā)

    點(diǎn)擊左下角 錘子?圖標(biāo) 就可以交叉編譯項(xiàng)目。 編譯出的arm架構(gòu)可執(zhí)行文件如下: 將目標(biāo)文件發(fā)送到開(kāi)發(fā)板。 在開(kāi)發(fā)板上運(yùn)行,自定義的qt應(yīng)用
    發(fā)表于 08-19 15:04

    T527N開(kāi)發(fā)板試用】7寸RGB屏幕適配與TP驅(qū)動(dòng)

    Touchscreens input device support---> 再選中 Focaltech Touchscreen 然后重新編譯kernel。按照[【T527N開(kāi)發(fā)板
    發(fā)表于 08-15 18:06

    RK3568開(kāi)發(fā)板暗藏32位兼容開(kāi)關(guān)?嵌入式帶你一鍵解鎖!

    RK3568是一款64位處理器,嵌入式為其提供的交叉編譯器也是64位的,然而部分用戶可能需要在RK3568開(kāi)發(fā)板上運(yùn)行32位應(yīng)用。本文將詳細(xì)闡述如何使用32位交叉編譯器,編譯出32位應(yīng)用,并使其能夠在
    的頭像 發(fā)表于 07-19 08:49 ?4049次閱讀
    RK3568<b class='flag-5'>開(kāi)發(fā)板</b>暗藏32位兼容開(kāi)關(guān)?<b class='flag-5'>飛</b><b class='flag-5'>凌</b>嵌入式帶你一鍵解鎖!

    T527N開(kāi)發(fā)板試用T527N開(kāi)發(fā)板開(kāi)箱評(píng)測(cè)

    很高興收到嵌入式申請(qǐng)的T527N開(kāi)發(fā)板,板子的正反面如下圖所示: 可以看到,板子上面的資源非常的豐富,有CAN,485, SIM卡槽
    發(fā)表于 07-04 11:43

    T527N開(kāi)發(fā)板試用】開(kāi)箱與開(kāi)發(fā)板介紹視頻

    嵌入式OK527N-C開(kāi)發(fā)板開(kāi)箱介紹】 https://www.bilibili.com/video/BV1sfKSzmEtU/?share_source=copy_web&
    發(fā)表于 06-26 09:43

    5分鐘學(xué)會(huì)網(wǎng)絡(luò)服務(wù)搭建!i.MX9352開(kāi)發(fā)板 + Linux 6.1實(shí)戰(zhàn)示例

    本文就將以嵌入式OK-MX9352-C開(kāi)發(fā)板(搭載了在工業(yè)物聯(lián)網(wǎng)領(lǐng)域廣泛應(yīng)用的NXP i.MX9352處理器)為平臺(tái),介紹如何在Linu
    的頭像 發(fā)表于 06-13 16:42 ?1000次閱讀
    5分鐘學(xué)會(huì)網(wǎng)絡(luò)服務(wù)搭建!<b class='flag-5'>飛</b><b class='flag-5'>凌</b><b class='flag-5'>i</b>.MX9352<b class='flag-5'>開(kāi)發(fā)板</b> + Linux 6.1實(shí)戰(zhàn)示例

    【評(píng)測(cè)試用】合眾HZ-T536開(kāi)發(fā)板免費(fèi)試用體驗(yàn)

    【評(píng)測(cè)試用】合眾HZ-T536開(kāi)發(fā)板免費(fèi)試用體驗(yàn)
    的頭像 發(fā)表于 05-27 08:05 ?524次閱讀
    【評(píng)測(cè)<b class='flag-5'>試用</b>】合眾HZ-T536<b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)<b class='flag-5'>試用</b>體驗(yàn)

    3.1s啟動(dòng)!嵌入式i.MX93開(kāi)發(fā)板部署LVGL,打造更高效的GUI

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

    嵌入式OK3588J-C開(kāi)發(fā)板體驗(yàn)】OK3588J-C開(kāi)發(fā)板QT環(huán)境安裝

    明明使用的是開(kāi)發(fā)板,為什么要選擇的是Desktop,這是因?yàn)槲覀兊?b class='flag-5'>開(kāi)發(fā)板實(shí)現(xiàn)在就已經(jīng)相當(dāng)于是桌面系統(tǒng)了,與我們使用的x86個(gè)人電腦使用起來(lái)是相同的,我們?cè)趚86電腦上面開(kāi)發(fā),然后再給
    發(fā)表于 12-28 18:20

    嵌入式OK3588J-C開(kāi)發(fā)板體驗(yàn)】OK3588J-C開(kāi)發(fā)板開(kāi)箱評(píng)測(cè)

    用料的誠(chéng)意滿滿! 里面搭配一個(gè)12V 2A的充電適配器,接通開(kāi)發(fā)板,插上網(wǎng)線和USB type-C 串口, 打開(kāi)電腦上的串口調(diào)試
    發(fā)表于 12-04 15:23