關(guān)鍵詞:串口;字符指令;LED燈;物聯(lián)網(wǎng)
0 引言
Zigbee技術(shù)是一種適用于短距離和低速率下的無線通信技術(shù)[1]。隨著物聯(lián)網(wǎng)技術(shù)的飛速發(fā)展,經(jīng)常會用到通過串口指令來達(dá)到控制LED燈亮滅的目的。本文針對Zigbee開發(fā)板上的4個LED燈,以場景使用兩位字符指令來控制4個LED燈的亮滅為例,詳細(xì)分析了在教學(xué)過程中針對此類場景的程序設(shè)計思路,并使用多種方法編程實現(xiàn)使用指令控制LED燈的亮滅,以此來達(dá)到讓學(xué)生掌握串口通信中如何用指令來控制燈狀態(tài)的目的。
1 串口通信
串口是串行接口的簡稱,也稱為串行通信接口。串口通過將一個字節(jié)的各個位依次發(fā)送來實現(xiàn)數(shù)據(jù)傳輸,也就是在一條信號線上將數(shù)據(jù)一個比特一個比特地逐位進(jìn)行傳輸?shù)耐ㄐ拍J?。相比較而言,按字節(jié)(byte) 來傳輸?shù)牟⑿型ㄐ旁趥鬏斔俣壬细煲恍?,但是串口通信可以在不同線路同時實現(xiàn)發(fā)送數(shù)據(jù)和接收數(shù)據(jù),因此串行通信可以很簡單地實現(xiàn)遠(yuǎn)距離通信[2]。
2 Zigbee 開發(fā)板中LED 燈的介紹
本文使用的是CC2530 Zigbee開發(fā)板,其中有4個LED燈D3/D4/D5/D6,對應(yīng)的引腳分別為P1_0、P1_1、P1_3、P1_4[3]。如圖1所示。
在使用這4個LED燈之前,可以對LED燈和對應(yīng)引腳做宏定義,來定義燈和引腳的對應(yīng)關(guān)系[4]。當(dāng)然也可以直接用引腳來表示對應(yīng)的LED燈。但是為了程序的可讀性,最好先用宏定義來定義燈和引腳的對應(yīng)關(guān)系。
在程序的開發(fā)過程中,就可以使用D3來代替P1_0,從而使代碼更加清晰易讀。
3 實際場景應(yīng)用
3.1 項目需求
現(xiàn)實生活中有很多使用指令來控制燈亮滅的具體場景[5]。下面通過一個具體的案例來詳細(xì)討論如何用指令具體控制LED燈的亮滅,并通過編寫程序完成用不同指令分別控制四個燈的亮滅。場景要求如表1 所示。
3.2 項目分析
首先使用宏定義來確定四個LED燈和引腳的對應(yīng)關(guān)系。即:
#define D4 P1_1
#define D3 P1_0
#define D6 P1_4
針對項目要實現(xiàn)的功能,8條指令分別控制4個LED的亮滅,初步分析程序的設(shè)計思路,首先要判斷接收到的字符指令是否合法,如果合法,再根據(jù)指令內(nèi)容判斷要控制哪個LED燈的亮滅狀態(tài)。
因此,程序設(shè)計可以分為兩部分,接收指令部分和指令控制部分。接收指令部分負(fù)責(zé)判斷是否符合指令組合規(guī)則,如果符合,就存入指定數(shù)組,否則,不予接收。而指令控制部分負(fù)責(zé)對接收到的指令進(jìn)行判斷,屬于控制哪個燈進(jìn)行哪些狀態(tài)的改變。
3.3 具體程序設(shè)計
3.3.1 接收指令部分
對接收到的字符進(jìn)行分析,如果第一個字符是1 或2或3或4其中之一,那么表示合法指令開始,繼續(xù)接收第2個字符。如果不是 1或2或3或4中的字符,表示是非法指令,不予接收。因此在判斷接收的指令是否是合法指令時,需要用選擇結(jié)構(gòu)去判定。當(dāng)接收的是合法指令時,將接收的兩位字符指令依次存入指定數(shù)組。
因此根據(jù)以上分析過程,可以設(shè)計接收指令的程序如下:
3.3.2 指令控制部分
由于項目要求兩位指令控制4個LED燈的亮滅,因此只需要對接收到的兩位字符進(jìn)行內(nèi)容判斷,來確定控制4個LED燈中的哪一個燈的亮滅狀態(tài)即可。
那么如何來判斷是哪兩位字符?最簡單的辦法就是通過數(shù)組的下標(biāo)來判斷。當(dāng)下標(biāo)大于1時,說明數(shù)組里已經(jīng)存入了兩個字符。接收指令結(jié)束,可以進(jìn)行指令控制部分的程序設(shè)計了。
用指令來控制4個LED燈的亮滅,主要是看指令中兩個字符的組合,來判斷符合控制哪個LED燈的指令,從而去實現(xiàn)預(yù)期效果。因此,可以通過多種方法進(jìn)行程序設(shè)計來實現(xiàn)。
方法1:
由于第一個字符是1234中其中一個,因此需要判斷第二個字符是否是*,如果是*,那么再根據(jù)第一個字符是1234 中哪一個來判斷控制哪個燈亮,使用switch語句可以非常方便地設(shè)計1234字符的選擇問題。然后再判斷第二個字符是否是0,如果是0,那么再根據(jù)第一個字符是1234中哪一個來判斷控制哪個燈滅。因此第一種程序設(shè)計方法如下:
方法2:
首先判斷第一個字符是1234中其中哪一個,然后再判斷第二個字符是*還是0,從而去判斷控制哪個燈的亮滅。使用if語句的嵌套,可以很好地解決此類問題。因此第二種程序設(shè)計方法如下:
方法3:
用邏輯與的方法同時判斷數(shù)組里第一個元素和第二個元素分別是哪種組合,從而去判斷控制哪個燈的亮滅。因此第三種程序設(shè)計方法如下:
注意:無論使用上述三種方法中的哪種方法,在指令控制部分最后一定要對數(shù)組進(jìn)行清零,目的是等待下一個指令的接收,如果不清零,即使輸入新的指令,由于數(shù)組里已經(jīng)存入原先的指令,新的指令也將不被響應(yīng)。
3.4 程序執(zhí)行結(jié)果
當(dāng)通過串口調(diào)試助手發(fā)送指令“1*”時,開發(fā)板上的D3被點(diǎn)亮了。如圖2所示:
當(dāng)發(fā)送指令“10”時D3被熄滅。
當(dāng)通過串口調(diào)試助手發(fā)送指令“3*”時,開發(fā)板上的D5被點(diǎn)亮了。如圖3所示:
當(dāng)發(fā)送指令“30”時D5被熄滅。
4 結(jié)束語
在物聯(lián)網(wǎng)應(yīng)用開發(fā)中,使用串口指令控制LED燈的亮滅是一個非常常見且基礎(chǔ)的應(yīng)用場景。除了控制LED 燈的亮滅,我們還可以使用串口指令來控制LED燈的閃爍、流水燈等更加豐富的效果。如果想要實現(xiàn)LED 燈的閃爍效果,只需要在指令控制部分將LED燈 的亮滅狀態(tài)程序更改為狀態(tài)取反即可;如果想要實現(xiàn)流水燈效果,則可以通過合理的延時設(shè)置來控制多個LED燈按順序依次點(diǎn)亮。對于物聯(lián)網(wǎng)技術(shù)感興趣的讀者,可以在學(xué)習(xí)本文提供的基礎(chǔ)案例后,嘗試根據(jù)自己的需求去設(shè)計和實現(xiàn)更多有趣的LED控制效果,這將有助于加深對物聯(lián)網(wǎng)技術(shù)的理解和掌握。
總之,通過串口指令控制LED燈,是物聯(lián)網(wǎng)應(yīng)用開發(fā)中一個簡單且實用的技能,掌握它可以幫助我們更好地探索和實踐物聯(lián)網(wǎng)技術(shù)。