當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]前幾天我在世偉兄的開源群上分享了這個框架,有群友希望我用這個框架寫一個小項目,于是我就突發(fā)奇思妙想,在1-2天內(nèi)設(shè)計規(guī)劃了這個一個課題:基于小熊派簡易氣體探測儀。

廢話不多說,先上視頻,配合個人簡單的講解,看看具體的展示效果:

關(guān)于表驅(qū)動,之前也分享過一篇文章:

C語言表驅(qū)動法編程實踐(精華帖,建議收藏并實踐)

兩年前,我也曾在Github上開源過一個基于結(jié)構(gòu)體數(shù)組的表驅(qū)動菜單框架,如下:

這個框架應(yīng)付一些與按鍵、LCD交互的案子可以說是非常簡單且高效,所以這些年,凡是自己副業(yè)或者主業(yè)公司做的任何一個項目只要涉及到類似的思想,那么我基本都會沿用這套框架來做,可以說這套框架已經(jīng)給我掙了不少項目錢了;收獲還是蠻大的!Github上還放置了我當(dāng)時寫的PPT,是我當(dāng)時根據(jù)項目大致的需求寫的,但是由于產(chǎn)品需求的不確定性,老是變來變?nèi)?說實話我真的非常討厭這樣子,以前很討厭,現(xiàn)在極度討厭,因為沒有明確的需求卻還要干著低效率且沒有意義的活,簡直是浪費資源&&浪費時間&&浪費生命),后面直接舍棄了這個框架,沿用最簡單的思維去做,因為可能當(dāng)事人他自己都不知道要做成什么樣子,畢竟沒有明確需求的東西不值得提復(fù)用性把它做得高逼格,所以只能用簡單的思路去做了;簡單的框架思維當(dāng)然就沒有這個好,這個PPT也就閑置下來了。當(dāng)然不同的產(chǎn)品可以根據(jù)自己的需求定制修改,這么好用的東西難道不分享?肯定要分享啦!

總結(jié)

沒有明確需求的產(chǎn)品,別提什么復(fù)用性和高逼格!因為那最終修修補補寫出來的代碼會比屎還難看!我相信你的前同事技術(shù)如果真的很菜的話,當(dāng)項目需求明確且項目時間充足的時候,你甚至希望花10天時間將他的代碼推倒重寫也不會繼續(xù)去維護他的垃圾代碼。

1、當(dāng)時寫的PPT分享

前幾天我還在世偉兄的開源群上分享了這個框架,有群友希望我用這個框架寫一個小項目,于是我就突發(fā)奇思妙想,在1-2天內(nèi)設(shè)計規(guī)劃了這個一個課題:基于小熊派簡易氣體探測儀。

該項目復(fù)用了之前寫小熊派例程相關(guān)的代碼,至于是怎么實現(xiàn)的,請自行閱讀代碼或者翻看以前的文章了解。

2、核心框架結(jié)構(gòu)

先來看下這個框架的核心數(shù)據(jù)結(jié)構(gòu)與操作方法,位于該項目的menu.h、menu.c

menu.h

typedef?void?(*menu_op_func)(uint8_t);
typedef?struct?OP_STRUCT
{
?int?op_menu?;?????????/*操作菜單*/
?menu_op_func?opfun?;??/*帶參數(shù)的操作方法*/
}OP_MENU_PAGE;


void?Enter_Page(uint8_t?index,uint8_t?KeyValue);
void?Menu_Select_Item(uint8_t?current_index,?uint8_t?KeyValue);

menu.c

/*菜單操作表定義*/
static?OP_MENU_PAGE?g_opStruct[]?=?
{
?{SLEEP_PAGE?????,?sleep_page_process},
?{MAIN_PAGE??????,?main_page_process},?
?{TEST_PAGE??????,?test_page_process},
?{VERSION_PAGE???,?version_info_page_process},
};

/*跳轉(zhuǎn)到表所對應(yīng)的頁面*/
static?int?JUMP_Table(int8_t?op?,?uint8_t?KeyValue)
{
?assert(op?>=?sizeof(g_opStruct)/sizeof(g_opStruct[0]));
?assert(op??g_opStruct[op].opfun(KeyValue);
?return?0?;
}

/*菜單選擇項*/
void?Menu_Select_Item(uint8_t?current_index,?uint8_t?KeyValue)
{
?JUMP_Table(current_index?,?KeyValue);
}

這個框架比網(wǎng)上現(xiàn)有的一些菜單框架好就好在它更靈活,因為它多了一個uint8_t的形參,該形參可以作為事件值進行傳遞,每個頁面都可以響應(yīng)當(dāng)前收到的某個事件值然后執(zhí)行相應(yīng)的應(yīng)用邏輯,事實上它就是這么做的。

對比下之前我發(fā)的一篇文章(開源按鍵組件MultiButton支持菜單操作(事件驅(qū)動型))里某個寫得雜亂無章的通用菜單框架,是不是覺得我的這個更加靈活呢?當(dāng)然結(jié)合這個框架,我們是否還能將MultiButton也與它綁定在一起呢?


如果您更好的優(yōu)化思路或者更好的框架思想,歡迎與我一起共同學(xué)習(xí)交流分享。

3、小熊派簡易氣體探測器實戰(zhàn)項目框架

項目基于開源軟件定時器multi_timer進行維護管理:

  • (1)Key_Timer定時器用于按鍵長短按的掃描
  • (2)DataTime_Timer定時器用于實時時鐘顯示
  • (3)Test_Timer定時器用于核心檢測邏輯實現(xiàn)

3.1、按鍵交互邏輯

其中,在主頁面中,通過短按按鍵可以橫向切換菜單項,通過短按右鍵可以進入菜單項,分別為:

  • 測試(核心檢測邏輯)
  • 上傳(未實現(xiàn))
  • 版本(查看版本信息)

在不同頁面中,可以根據(jù)界面提示退出回到主菜單。

在主頁面中,長按左鍵可以讓設(shè)備進入低功耗模式(關(guān)背光),繼續(xù)長按左鍵可以點亮屏(開背光)

3.2、核心檢測邏輯

其中核心檢測邏輯主要由四部分組成,分別是:

  • 基準(zhǔn)
  • 檢測
  • 安全
  • 危險

基準(zhǔn)

那么什么是基準(zhǔn)呢?基準(zhǔn)在這里的含義是為了判斷當(dāng)前傳感器的狀態(tài)是否穩(wěn)定,能夠進行檢測的條件,在這里我設(shè)置的氣體基準(zhǔn)條件為閾值的1/2,閾值的定義在test_ui.h中:

#define?ALARM_THRESHOLD?600?//600ppm

基準(zhǔn)通過的條件:

當(dāng)前獲取的氣體傳感器ppm < 1/2閾值,連續(xù)計數(shù)自加超過10次,則認為此時傳感器已經(jīng)穩(wěn)定了,這時候可以進入檢測狀態(tài),當(dāng)前這個次數(shù)可以通過參數(shù)設(shè)置進行調(diào)節(jié),后續(xù)可以繼續(xù)在本項目中拓展該功能。

檢測

當(dāng)進入檢測狀態(tài)以后,繼續(xù)讀取氣體傳感器的ppm值,如果在10s內(nèi),也就是進度條跑滿了以后,ppm值仍小于自定義閾值,那么就跳轉(zhuǎn)為安全的狀態(tài)。

當(dāng)進入檢測狀態(tài)以后,繼續(xù)讀取氣體傳感器的ppm值,如果在10s內(nèi),ppm值大于于自定義閾值連續(xù)20次,那么就跳轉(zhuǎn)為危險的狀態(tài)。

安全

畫面顯示安全,當(dāng)重新按下左鍵即回到基準(zhǔn)的流程。

危險

畫面危險閃爍,LED報警燈以100ms頻率閃爍,蜂鳴器以100ms頻率交替響滅。

在測試頁面任一狀態(tài)下,長按左鍵直接顯示安全,短按右鍵退出回到主菜單。

事實上,市面上大部分類似的儀器儀表檢測產(chǎn)品都是差不多的實現(xiàn)邏輯,我們只要明白了基本原理,把整個項目功能框架搭出來,后續(xù)就可以根據(jù)實際需求進行隨意拓展了。

其余功能:后續(xù)還可以做報警記錄存儲、數(shù)據(jù)上傳到OneNet或者華為云等平臺、參數(shù)設(shè)置等等,總之這個項目可拓展性非常強,這些功能將在本項目開發(fā)的下一章節(jié)持續(xù)進行拓展并分享,歡迎及時關(guān)注我的碼云倉庫與微信公眾號文章更新。

本節(jié)代碼已同步到碼云的代碼倉庫中:

獲取方法如下:

1、新建一個文件夾

2、使用git clone遠程獲取小熊派所有案例代碼

我還將之前做的一些項目以及練習(xí)例程在近期內(nèi)全部上傳完畢,與大家一起分享交流:

公眾號粉絲福利時刻

這里我給大家申請到了福利,本公眾號讀者購買小熊派開發(fā)板可享受9折優(yōu)惠,有需要購買小熊派以及騰訊物聯(lián)網(wǎng)開發(fā)板的朋友,淘寶搜索即可,跟客服說你是公眾號:嵌入式云IOT技術(shù)圈?的粉絲,立享9折優(yōu)惠!

往期精彩

TencentOS tiny RTOS快速入門

"結(jié)構(gòu)體"和"共用體"在單片機中的妙用

記一個OLED編程中文顯示函數(shù)的坑(留意變量數(shù)據(jù)類型的范圍)

上海出差之行--領(lǐng)略外灘美景、RT-Thread總部之旅、嵌友面基、返程記錄

覺得本次分享的文章對您有幫助,隨手點[在看]并轉(zhuǎn)發(fā)分享,也是對我的支持。

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉