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

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

STM32狀態(tài)機(jī)編程實(shí)例——全自動(dòng)洗衣機(jī)(下)

2022-08-08 22:52 作者:碼農(nóng)愛(ài)學(xué)習(xí)-B站  | 我要投稿

上篇文章,通過(guò)狀態(tài)機(jī)編程,實(shí)現(xiàn)了全自動(dòng)洗衣機(jī)的邏輯控制,并通過(guò)串口打印的方式顯示各個(gè)狀態(tài)。

本篇,為了更加直觀的感受狀態(tài)機(jī)的運(yùn)行,使用0.96寸OLED來(lái)顯示各個(gè)狀態(tài),并搭配對(duì)應(yīng)的動(dòng)態(tài)圖標(biāo)來(lái)體現(xiàn)洗衣機(jī)工作的各個(gè)狀態(tài)。

先來(lái)看下演示效果:


為了能方便的在OLED上顯示文字和圖片,可以借助一些圖形庫(kù)來(lái)幫我們顯示,這里使用的是U8g2圖形庫(kù)。

1.1 U8g2庫(kù)移植

U8g2庫(kù)在STM32上的移植,之前的文章已經(jīng)介紹過(guò),具體的移植過(guò)程可以參考這篇:

移植成功后,可以使用測(cè)試?yán)舔?yàn)證U8g2庫(kù)的顯示效果。

1.2 圖片顯示

圖片相比較文字,可以展示更加豐富的內(nèi)容,因此本篇通過(guò)簡(jiǎn)單的單色圖片來(lái)展示洗衣機(jī)的工作狀態(tài)。

U8g2庫(kù)顯示圖片,可以使用u8g2_DrawXBM函數(shù),需要先將圖片轉(zhuǎn)為數(shù)組。

可以使用這個(gè)在線網(wǎng)頁(yè)來(lái)進(jìn)行圖片數(shù)據(jù)的轉(zhuǎn)換:https://tools.clz.me/image-to-bitmap-array

這里可以使用自己喜歡的圖片,進(jìn)行展示,比如我選取了不同水量的洗衣機(jī)圖標(biāo)來(lái)顯示洗衣機(jī)的當(dāng)前水量,使用多張圖片的交替顯示產(chǎn)生洗衣機(jī)在清洗的動(dòng)畫(huà)效果。

2 更多狀態(tài)輸出

OLED屏幕要想顯示洗衣機(jī)的工作狀態(tài),就需要獲取狀態(tài)機(jī)的具體工作狀態(tài)。這里自定義了一些展示需要用到的數(shù)據(jù),組成一個(gè)結(jié)構(gòu)體,狀態(tài)機(jī)在運(yùn)行過(guò)程中,對(duì)各個(gè)成員變量進(jìn)行修改,然后OLED端獲取這些數(shù)據(jù),再進(jìn)行展示。

對(duì)于OLED的展示邏輯,這里是在狀態(tài)機(jī)的每個(gè)循環(huán)結(jié)束后,調(diào)用下面的程序邏輯進(jìn)行展示:

當(dāng)此輪狀態(tài)循環(huán)有新的數(shù)據(jù)產(chǎn)生時(shí),則根據(jù)狀態(tài)機(jī)的主狀態(tài),分別顯示對(duì)應(yīng)狀態(tài)下的圖片或動(dòng)畫(huà)。

比如加水狀態(tài),會(huì)根據(jù)當(dāng)前加的水位,不斷更新圖片展示的水位:



對(duì)于主程序的結(jié)構(gòu),和上篇一樣,只是增加了OLED的顯示:

在狀態(tài)機(jī)每運(yùn)行一個(gè)循環(huán),獲取一下具體的狀態(tài)數(shù)據(jù),然后使用OLED將具體的狀態(tài)數(shù)據(jù)展示出來(lái)。

3 具體演示

再來(lái)對(duì)比看下這個(gè)狀態(tài)圖,實(shí)驗(yàn)測(cè)試狀態(tài)機(jī)的執(zhí)行。

  • 正常的洗衣流程

不考慮暫停這個(gè)狀態(tài),洗衣機(jī)上點(diǎn)開(kāi)始后,依次經(jīng)歷空閑、加水、清洗、排水、甩干這幾個(gè)流程即結(jié)束,若清洗計(jì)數(shù)設(shè)置了不知1次,則加水、清洗、排水這3個(gè)動(dòng)作會(huì)循環(huán)執(zhí)行對(duì)應(yīng)的次數(shù)。

  • 洗衣流程中暫停再繼續(xù)

在洗衣機(jī)的運(yùn)行狀態(tài):加水、清洗、排水、甩干,通過(guò)暫停按鈕,可以暫停這些狀態(tài)的執(zhí)行,此時(shí)狀態(tài)機(jī)會(huì)運(yùn)行于暫停模式,再按繼續(xù)(暫停/繼續(xù)的一個(gè)按鈕),則會(huì)繼續(xù)執(zhí)行洗衣工作。

  • 暫停后修改水量或次數(shù)后再繼續(xù)

在洗衣過(guò)程中,如果想要修改洗衣的水量或次數(shù),可以先通過(guò)暫停鍵來(lái)暫停洗衣機(jī)的運(yùn)行,然后通過(guò)水位或次數(shù)按鈕,使?fàn)顟B(tài)機(jī)從暫停狀態(tài)先切換到空閑狀態(tài),進(jìn)行水位或次數(shù)的調(diào)整后,再繼續(xù),即會(huì)按照新的設(shè)置參數(shù)繼續(xù)運(yùn)行洗衣程序。

比如本來(lái)的清洗水位是3,清洗次數(shù)是1,在第一次清洗的加水時(shí)按下暫停,再將清洗參數(shù)進(jìn)行修改,比如水位設(shè)為5,次數(shù)設(shè)為2,再繼續(xù)后,會(huì)再次進(jìn)入加水狀態(tài),并將水位補(bǔ)到5后,繼續(xù)清洗,并清洗2遍結(jié)束。

注:本狀態(tài)機(jī)還有繼續(xù)優(yōu)化的空間,比如:

  • 水量只會(huì)補(bǔ)加,多了此輪清洗不會(huì)排出。比如先設(shè)置的水位是5,在加到3個(gè)時(shí)候,暫停并修改為2,再繼續(xù)后,判斷大于目標(biāo)水位則會(huì)直接開(kāi)始清洗,不會(huì)先由水位3再排水到水位2再清洗

  • 任何清洗狀態(tài)(加水、清洗、排水)按下暫停調(diào)整水位后,再繼續(xù),都會(huì)默認(rèn)跳到加水重新新的清洗循環(huán),如果是在排水狀態(tài),調(diào)整了水位后,此次的水還沒(méi)有排位,就又重新加水開(kāi)始洗,不太合理

以上3種測(cè)試方式的演示效果,可以再對(duì)比看下演示視頻:


本篇在上篇全自動(dòng)洗衣機(jī)的狀態(tài)機(jī)編程實(shí)例的基礎(chǔ)上,增加了OLED來(lái)更新直觀的展示洗衣機(jī)的工作狀態(tài),并通過(guò)3種測(cè)試場(chǎng)景來(lái)展示洗衣機(jī)工作狀態(tài)機(jī)的執(zhí)行。



STM32狀態(tài)機(jī)編程實(shí)例——全自動(dòng)洗衣機(jī)(下)的評(píng)論 (共 條)

使用qq登录你需要登录后才可以评论。
金塔县| 科技| 霍城县| 海淀区| 南通市| 铁岭市| 库尔勒市| 措美县| 平舆县| 额敏县| 巴彦淖尔市| 小金县| 靖江市| 渭源县| 太仓市| 宜兴市| 甘南县| 洪江市| 墨脱县| 孟连| 鞍山市| 集安市| 自治县| 聊城市| 潞西市| 利川市| 五家渠市| 商河县| 芷江| 金寨县| 琼中| 昭通市| 昌图县| 修武县| 革吉县| 通州市| 甘孜| 永城市| 南澳县| 陕西省| 福建省|