牟曉東
本文以模擬題“絢麗彩燈”為例,進行題目解析。
第四題“絢麗彩燈”(難度系數(shù)4,30個計分點):
每逢節(jié)日,可以看到商場各地都掛著絢麗的彩燈,它們通過顏色變換,可以實現(xiàn)各種各樣的絢麗效果,現(xiàn)制作一些絢麗的彩燈效果。
硬件準備:
1個按鍵模塊【接入25#引腳】,1個數(shù)碼管【接入IIC接口】,燈帶(60顆燈珠)【接入18#引腳】,杜邦線若干。
編程實現(xiàn):
(1)程序開始時,數(shù)碼管只有最后一位顯示0,燈帶熄滅;
(2)當(dāng)按鍵每被按一次時,數(shù)碼管最后一位顯示的數(shù)字都在之前的基礎(chǔ)上加1,當(dāng)數(shù)碼管最后一位顯示4時,再按一次,數(shù)碼管顯示1,如此重復(fù)1-4的顯示;
(3)當(dāng)數(shù)碼管顯示1的時候,燈帶前面30個燈亮紅色,后面30個燈亮藍色;
(4)當(dāng)數(shù)碼管顯示2的時候,燈帶以紅色和藍色交叉顯示,最前面為紅色;
(5)當(dāng)數(shù)碼管顯示3的時候,燈帶以紅色和藍色交叉顯示,每隔0.5秒,紅色和藍色位置交換一次;
(6)當(dāng)數(shù)碼管顯示4的時候,燈帶從中間位置向兩邊同時每隔0.1秒各點亮一個燈珠,向前點亮燈珠的顏色為紅色,向后點亮燈珠的顏色為藍色;
(7)如此循環(huán)。
判斷標準:
2分:實現(xiàn)“編程實現(xiàn)”中的(1);
5分:實現(xiàn)“編程實現(xiàn)”中的(2);
5分:實現(xiàn)“編程實現(xiàn)”中的(3);
5分:實現(xiàn)“編程實現(xiàn)”中的(4);
5分:實現(xiàn)“編程實現(xiàn)”中的(5);
5分:實現(xiàn)“編程實現(xiàn)”中的(6);
3分:完全符合題意。
1.審清題意,抓住關(guān)鍵點
“絢麗彩燈”的考點有分支選擇結(jié)構(gòu)的嵌套、按鍵模塊的循環(huán)計數(shù)和燈帶的初始化設(shè)置及各種效果的實現(xiàn)。此外,還要注意數(shù)碼管的初始化和顯示控制方法。
(1)分支選擇結(jié)構(gòu)的最“內(nèi)層”嵌套是匹配按鍵模塊的1-4按下次數(shù),對應(yīng)控制數(shù)碼管最低位(3號)顯示該數(shù)字,以及燈帶的一種顯示效果。
(2)按鍵模塊的按下次數(shù)最大值為4,必須使用條件語句判斷其是否超出范圍,當(dāng)該值大于4時需要使用賦值語句重新將其值改寫為1,進行下一次的循環(huán)。
(3)燈帶的60顆燈珠編號為0-59,每顆燈珠均可獨立控制其顯示顏色(也可用RGB值來控制);當(dāng)數(shù)碼管分別顯示1-4時,對應(yīng)燈帶的四種顯示效果中多次提到“前30、后30”、“中間位置”,編程時注意分別使用0-29和30-59來區(qū)分前后兩大組燈珠。
2.實驗器材的安裝
按照題目要求,首先將按鍵模塊接入25#引腳;燈帶需要接入18#引腳,注意燈帶的三根異色引線的標注,通常是紅色為+5V(電源正極)、白色為GND、綠色為Din(數(shù)字信號輸入),對應(yīng)擴展板18#引腳的VCC、GND和D(數(shù)字端);由于燈帶接入18#引腳占用了IIC接口Up列一側(cè)的空間,因此數(shù)碼管必須要旋轉(zhuǎn)180度,接至IIC接口Down列對角線位置;最后,給樹莓派接通電源,啟動操作系統(tǒng)(如圖1)。
3.編程實現(xiàn)“絢麗彩燈”
(1)進入平臺編程環(huán)境
登錄古德微機器人平臺切換至“積木”編程區(qū)。
(2)編寫“初始化數(shù)碼管”函數(shù)
建立函數(shù)“初始化數(shù)碼管”,先關(guān)閉0-3號數(shù)碼管,再設(shè)置亮度為1(對四個數(shù)碼管均有效);最后設(shè)置3號數(shù)碼管顯示“0”(不顯示點),實現(xiàn)題目中(1)對數(shù)碼管“只有最后一位顯示0”的顯示要求(如圖2)。
(3)編寫“初始化燈帶”函數(shù)
燈帶的初始化操作需要先使用“設(shè)置GPIO18可控制燈帶60個燈并設(shè)置亮度為50”語句;然后構(gòu)建一個循環(huán)結(jié)構(gòu),控制變量i從0增至59(步長為1),依次設(shè)置每個燈珠的顏色為黑色,實現(xiàn)題目中(1)對燈帶“熄滅”的要求(黑色即“熄滅”)。特別要注意的是,最后必須添加一條“燈帶刷新顯示”語句,否則之前對燈帶的設(shè)置控制均是無效的(如圖3)。
(4)構(gòu)建循環(huán)結(jié)構(gòu)中的多分支選擇嵌套結(jié)構(gòu)
在主程序中分別調(diào)用“初始化數(shù)碼管”和“初始化燈帶”函數(shù)后,建立變量“數(shù)字”并賦值為0,用來存儲按鍵次數(shù)(數(shù)字1-4);接著建立“重復(fù)當(dāng)真”的循環(huán)結(jié)構(gòu),進行外層分支選擇的判斷,條件為是否從25號按鍵獲取到“按下”動作;然后,將變量“數(shù)字”進行“自增1”賦值運算,并且通過一個“如果…執(zhí)行…”語句設(shè)置其運算規(guī)律(大于4時重新“回歸”為1);通過“設(shè)置3號數(shù)碼管顯示‘?dāng)?shù)字,并顯示點‘0”語句,將變量數(shù)字的值根據(jù)變化(1、2、3、4)均在數(shù)碼管的最低位上顯示輸出。
建立“如果…執(zhí)行…否則如果…執(zhí)行……”四分支選擇結(jié)構(gòu),準備實現(xiàn)題目中(3)-(6)所要求的燈帶四種顯示效果:
①當(dāng)數(shù)字為1時,為了實現(xiàn)“前面30個燈亮紅色、后面30個燈亮藍色”(注意二者應(yīng)該是同步進行的)效果,應(yīng)該只建立一個循環(huán)結(jié)構(gòu)來控制兩組燈珠;如果是兩個循環(huán)結(jié)構(gòu)來分別控制兩組燈珠的話,效果就變成了先亮一組30個、再亮另一組30個??刂谱兞縤從初值0自增至終值29(步長為1),前30個燈珠設(shè)置為亮紅色;后30個燈珠的序號是在前30個的基礎(chǔ)上對應(yīng)“加30”,即“i+30”,設(shè)置為亮藍色。切記:最后一定要添加一條“燈帶刷新顯示”語句(下同),控制燈帶發(fā)光。
②當(dāng)數(shù)字為2時,為了實現(xiàn)“以紅色和藍色交叉顯示且最前面為紅色”效果,同樣是只建立一個循環(huán)結(jié)構(gòu),注意變量i的取值范圍是從0至59,步長設(shè)置為2(實現(xiàn)奇偶數(shù)燈珠的“交叉”控制);排序為奇數(shù)的燈珠(編號為i)發(fā)光顏色設(shè)置為紅色,偶數(shù)燈珠(編號為“i+1”)發(fā)光顏色設(shè)置為藍色。
③當(dāng)數(shù)字為3時,為了實現(xiàn)“以紅色和藍色交叉顯示,每隔0.5秒,紅色和藍色位置交換一次”效果,需要建立兩個循環(huán)結(jié)構(gòu);相當(dāng)于重復(fù)執(zhí)行了兩次“數(shù)字為2時”的操作:先奇數(shù)燈珠發(fā)紅光、偶數(shù)燈珠發(fā)藍光,完成后停頓0.5秒,再奇數(shù)燈珠發(fā)藍光、偶數(shù)燈珠發(fā)紅光。
④當(dāng)數(shù)字為4時,為了實現(xiàn)“從中間位置向兩邊同時每隔0.1秒各點亮一個燈珠,向前點亮燈珠的顏色為紅色,向后點亮燈珠的顏色為藍色”效果,同樣是使用一個循環(huán)結(jié)構(gòu),注意變量i的取值范圍是從29至0(“每隔1”:步長為-1),第一組是從第29個燈珠向前發(fā)紅光,第二組是從第30個燈珠向后發(fā)藍光——特別要注意該組的編號構(gòu)建規(guī)則算式是“59-i”(如圖4)。
(5)其他細節(jié)
不管是主程序循環(huán)結(jié)構(gòu)的最后,還是各分支選擇結(jié)構(gòu)的最后(個別的還有中間位置),都需要考慮是否應(yīng)該添加等待語句,作用同樣是防止循環(huán)過多和過快地占用系統(tǒng)資源。
4.運行程序,檢測“絢麗彩燈”
在平臺編程環(huán)境中點擊“連接設(shè)備”,正常的話再點擊“運行”按鈕,對照題目進行多次測試,不斷按下按鍵,數(shù)碼管重復(fù)顯示1、2、3、4,同時燈帶也進行亮紅燈和藍燈等不同效果的對應(yīng)顯示,實現(xiàn)了題目要求。
最后將程序按照要求保存為“04.txt”,下載并上傳至考試系統(tǒng)中即可。