日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

廢話不多說(shuō),先上視頻,配合個(gè)人簡(jiǎn)單的講解,看看具體的展示效果:

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

C語(yǔ)言表驅(qū)動(dòng)法編程實(shí)踐(精華帖,建議收藏并實(shí)踐)

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

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

總結(jié)

沒(méi)有明確需求的產(chǎn)品,別提什么復(fù)用性和高逼格!因?yàn)槟亲罱K修修補(bǔ)補(bǔ)寫(xiě)出來(lái)的代碼會(huì)比屎還難看!我相信你的前同事技術(shù)如果真的很菜的話,當(dāng)項(xiàng)目需求明確且項(xiàng)目時(shí)間充足的時(shí)候,你甚至希望花10天時(shí)間將他的代碼推倒重寫(xiě)也不會(huì)繼續(xù)去維護(hù)他的垃圾代碼。

1、當(dāng)時(shí)寫(xiě)的PPT分享

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

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

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

先來(lái)看下這個(gè)框架的核心數(shù)據(jù)結(jié)構(gòu)與操作方法,位于該項(xiàng)目的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)到表所對(duì)應(yīng)的頁(yè)面*/
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?;
}

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

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

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


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

3、小熊派簡(jiǎn)易氣體探測(cè)器實(shí)戰(zhàn)項(xiàng)目框架

項(xiàng)目基于開(kāi)源軟件定時(shí)器multi_timer進(jìn)行維護(hù)管理:

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

3.1、按鍵交互邏輯

其中,在主頁(yè)面中,通過(guò)短按按鍵可以橫向切換菜單項(xiàng),通過(guò)短按右鍵可以進(jìn)入菜單項(xiàng),分別為:

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

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

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

3.2、核心檢測(cè)邏輯

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

  • 基準(zhǔn)
  • 檢測(cè)
  • 安全
  • 危險(xiǎn)

基準(zhǔn)

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

#define?ALARM_THRESHOLD?600?//600ppm

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

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

檢測(cè)

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

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

安全

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

危險(xiǎn)

畫(huà)面危險(xiǎn)閃爍,LED報(bào)警燈以100ms頻率閃爍,蜂鳴器以100ms頻率交替響滅。

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

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

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

本節(jié)代碼已同步到碼云的代碼倉(cāng)庫(kù)中:

獲取方法如下:

1、新建一個(gè)文件夾

2、使用git clone遠(yuǎn)程獲取小熊派所有案例代碼

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

公眾號(hào)粉絲福利時(shí)刻

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

往期精彩

TencentOS tiny RTOS快速入門

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

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

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

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

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

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

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢(shì)抑制與過(guò)流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問(wèn)題卻十分常見(jiàn),不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問(wèn)題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場(chǎng)照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢(shì)逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問(wèn)題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對(duì)周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來(lái)解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開(kāi)關(guān)電源具有效率高的特性,而且開(kāi)關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開(kāi)關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉