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