最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

嵌入式Qt-控制硬件:滑動條控制RGB燈

2022-09-05 23:17 作者:碼農(nóng)愛學(xué)習(xí)-B站  | 我要投稿

前面的幾篇文章,介紹Qt例程,都是和硬件無關(guān)的,Windows平臺和嵌入式平臺都能運行。

本篇,來測試一下Qt界面控制嵌入式平臺上的硬件,以野火i.MX6ULL板子上的RGB LED為例,實現(xiàn)Qt界面控制3種顏色LED的不同亮度混合顯示。

1 設(shè)計Qt滑條控制LED界面

先來看一下最終設(shè)計的界面效果:

有一個按鍵作為LED的總開關(guān),控制LED的點亮與熄滅。下面的3個滑條,控制3種顏色LED以不同的亮度點亮。右邊是一個顏色混合顯示面板,模擬RGB三種顏色的LED以不同亮度點亮后的混合亮度。

1.1 滑條控件

Qt Creator的UI設(shè)置界面中,有水平滑條和豎直滑條控件,可以直接使用:

右側(cè)的屬性窗戶可以設(shè)置滑條的取值范圍和初始值。

1.2 控件顏色

使用QPalette可以對界面顏色和控件的顏色進(jìn)行自定義設(shè)置

  • QPalete::Window——通常指窗口部件的背景色

  • QPalette::WindowText——通常指窗口不見的前景色

  • QPalette::Base——底色

  • QPalette::Button——指按鈕窗口部件的背景色

  • QPalette::ButtonText——指按鈕窗口部件的前景色

  • QPalette::Text——文本輸入窗口的前景色

  • QPalette::Background——背景色

  • QPalette::Foreground——前景色(界面中文字的統(tǒng)一顏色)

界面的顏色

整個UI界面的顏色可以這樣設(shè)置:

這里就是把整個界面的顏色設(shè)置為純白色

控件的顏色

例如文本標(biāo)簽控件(QLabel)的文字顏色可以這樣設(shè)置:

顏色混合面板控件(QTextBrowser)的面板顏色可以這樣設(shè)置:

1.3 滑條UI界面代碼編寫

構(gòu)造函數(shù)

滑條滑動時的槽函數(shù)

更新RGB三種顏色的混合顯示

2 板子上RGB LED的控制

2.1 i.MX6ULL系統(tǒng)燒錄

本篇的RGB LED測試,需要先燒錄野火i.MX6ULL自帶的系統(tǒng)固件,因為該系統(tǒng)已有Qt運行環(huán)境,且對應(yīng)的RGB LED的驅(qū)動程序也已配置好了,這樣就不需要再自己寫RGB LED的驅(qū)動程序了,我們只寫好Qt的應(yīng)用程序,實現(xiàn)對板子上LED的控制即可。

燒寫方法可參考:https://doc.embedfire.com/linux/imx6/quick_start/zh/latest/quick_start/install_debian/install_debian.html#

可以燒寫到SD卡中

燒寫到eMMC中

因為在SD卡中運行系統(tǒng),無法使用WIFI連網(wǎng),可以通過fire-config工具將SD卡的系統(tǒng)燒寫到eMMC中,刷機過程可參考:

https://doc.embedfire.com/linux/imx6/linux_base/zh/latest/linux_basis/fire-config_brief/fire-config_brief.html#id7

設(shè)置之后,選擇重啟,重啟后的系統(tǒng)將自動進(jìn)行從SD卡到EMMC的刷機。刷機過程大約2分鐘左右。刷機完成后,控制臺會重新進(jìn)入串口登錄頁面, 此時觀察開發(fā)板的LED燈,如果LED在持續(xù)閃爍,說明刷機成功。然后調(diào)整撥碼開關(guān)為相應(yīng)啟動方式,重新上電啟動系統(tǒng)即可。

也可以直接通過USB-OTG接口和 MFGTool2軟件燒寫到eMMC。ssh

燒寫到eMMC啟動,可以使用WIFI連網(wǎng),WIFI配網(wǎng)步驟參考:https://doc.embedfire.com/linux/imx6/quick_start/zh/latest/quick_start/wifi/wifi.html

Qt系統(tǒng)界面

野火i.MX6ULL自帶的系統(tǒng)固件燒錄后自啟動Qt程序界面如下:

串口方式登錄時:

普通用戶(帶sudo權(quán)限)

  • 賬戶: debian

  • 密碼: temppwd

ROOT用戶

  • 賬戶: root

  • 密碼: root

這個系統(tǒng)第一次運行時,會進(jìn)行屏幕觸摸校準(zhǔn),若校準(zhǔn)的不滿意,可刪除掉/etc/pointercal文件后重啟再進(jìn)行校準(zhǔn)。

rm /etc/pointercal


2.2 無Qt的RGB LED測試

野火i.MX6ULL的RGB LED的原理圖如下,由于驅(qū)動程序不需要自己寫了,實際上我們也不需要關(guān)心具體的硬件引腳是哪個,只需要使用驅(qū)動程序提供的設(shè)備描述符進(jìn)行LED的控制即可。

參考野火的測試代碼:https://doc.embedfire.com/linux/imx6/quick_start/zh/latest/quick_start/led_subsystem/led_subsystem.html#id4

測試代碼

編寫自己的沒有Qt界面的RGB LED測試代碼:

將該程序在Ubuntu進(jìn)行交叉編譯

測試效果

運行效果如下,3種顏色的燈每隔1s依次點亮熄滅:

對于亮度的控制,可以先參考教程中的命令行點燈測試:https://doc.embedfire.com/linux/imx6/linux_base/zh/latest/linux_basis/led_key_command_line_testing/led_key_command_line_testing.html

實際測試,串口指令無法控制燈的亮度,只能控制亮滅,亮度為1和亮度為255的效果一樣,都是同樣的亮度,不知道是硬件的問題還是軟件驅(qū)動的問題。

2.3 Qt中移植RGB LED控制代碼

在滑條UI界面代碼工程的基礎(chǔ)上,添加一個自定義的類,名字可起為regled:

然后在這個類中,將無Qt的RGB LED測試用到的代碼移植進(jìn)來,并結(jié)合Qt的滑動條對三種顏色的燈進(jìn)行控制。

這個是構(gòu)造函數(shù),先打開3個LED燈的文件描述符:

編寫一個RGB燈的顏色和亮度的控制函數(shù),供外部調(diào)用:

在UI界面類中,可以對RGB LED進(jìn)行控制:

在更新UI界面上的模擬顏色面板的同時,也將板子上的RGB LED的亮度進(jìn)行同步控制:

2.4 編譯時遇到的問題

程序首先在Windows的Qt Creator上進(jìn)行編譯,遇到了一些問題,記錄下解決方法。

  • 找不到unistd.h

    在Windows中編譯時,Qt Creater提示找不到unistd.h,這個其實是Visual Stidio編譯器找不這個頭文件。

    這個頭文件都是Linux系統(tǒng)中常用的,Windows中一般用不到,要消除這個編譯錯誤,可以在VS的安裝目錄手動添加一個這個文件。

    我的目錄是:

    D:\Tools1\vs2015\VC\include

    新建一個unistd.h:

  • open、write等函數(shù)的警告提示

    這些也是Linux中用到的函數(shù),在Window平臺編譯只是警告信息,沒有報錯,可以不用管

3 實驗演示

3.1 交叉編譯

和之前一樣,將Windows的Qt Creator中的源碼復(fù)制到Ubuntu中進(jìn)行交叉編譯,具體操作過程可參考之前的文章:

嵌入式Qt-動手編寫并運行自己的第1個ARM-Qt程序

這里僅記錄下編譯指令:

/home/xxpcb/myTest/imx6ull/otherlib/qt/qt-everywhere-src-5.12.9/arm-qt/bin/qmake

3.2 文件復(fù)制到板子中

由于這次測試使用的是野火的系統(tǒng)固件,不能和之前用網(wǎng)絡(luò)位置掛載根文件系統(tǒng)的方式,在Ubuntu中直接將文件復(fù)制到板子中(Ubuntu中的網(wǎng)絡(luò)掛載位置),因此本篇需要使用其它的方法將Ubuntu中編譯的文件復(fù)制到板子中。

這里使用SSH的方式進(jìn)行拷貝,首先要在Ubuntu中和i.MX6ULL板子中配置SSH功能,配置方法如下:

配置ssh

連接方式

基本的ssh連接方法是:

  • username表示該機器的用戶名,ip表示對應(yīng)的ip地址

  • ssh方式文件復(fù)制

從Ubuntu拉取文件到板子中

3.3 測試效果

在測試自己的例程之前,需要先將野火的自啟動Qt例程kill掉,否則兩個Qt程序會同步運行互相遮擋。

kill掉自啟動Qt程序

通過ps 、top 等命令查詢到ebf-qtdemo的pid,然后通過kill命令停止App運行

運行自己的Qt程序

野火的系統(tǒng)中,提供了一個運行腳本run_myapp.sh,需要調(diào)用這個腳本來運行自己的Qt程序

實際測試效果如下:

可以看出:

  • 板子上的LED的亮度其實不能調(diào)節(jié),只能亮或滅,需要確認(rèn)下是不是LED驅(qū)動的問題

  • 觸摸的方式拖動板子上的滑條,不太靈活,可能是觸摸和鼠標(biāo)都在起作用,兩者干擾了

  • Qt界面中模擬的顏色混合面板,顏色混合顯示正常

4 總結(jié)

本篇介紹了通過Qt中滑條的使用,并使用滑條來控制i.MX6ULL板子中RGB三個顏色LED的亮滅。通過燒錄野火自帶的系統(tǒng)固件,使用系統(tǒng)提供的LED驅(qū)動程序,再配置自己編譯的Qt應(yīng)用程序,來實現(xiàn)整個功能。




嵌入式Qt-控制硬件:滑動條控制RGB燈的評論 (共 條)

分享到微博請遵守國家法律
谷城县| 天津市| 雅安市| 克拉玛依市| 绥阳县| 霍林郭勒市| 临沭县| 安顺市| 武冈市| 三亚市| 巴塘县| 石屏县| 洛宁县| 永州市| 鹤庆县| 玉溪市| 叙永县| 望谟县| 吴江市| 西峡县| 淮滨县| 栾川县| 鹤壁市| 依兰县| 阳泉市| 远安县| 沙湾县| 资兴市| 东至县| 观塘区| 毕节市| 额敏县| 赤壁市| 呼玛县| 名山县| 张家港市| 陇川县| 洛扎县| 芒康县| 文山县| 乃东县|