牟曉東
本文以模擬題“絢麗彩燈”為例,進行題目解析。
第四題“絢麗彩燈”(難度系數4,30個計分點):
每逢節日,可以看到商場各地都掛著絢麗的彩燈,它們通過顏色變換,可以實現各種各樣的絢麗效果,現制作一些絢麗的彩燈效果。
硬件準備:
1個按鍵模塊【接入25#引腳】,1個數碼管【接入IIC接口】,燈帶(60顆燈珠)【接入18#引腳】,杜邦線若干。
編程實現:
(1)程序開始時,數碼管只有最后一位顯示0,燈帶熄滅;
(2)當按鍵每被按一次時,數碼管最后一位顯示的數字都在之前的基礎上加1,當數碼管最后一位顯示4時,再按一次,數碼管顯示1,如此重復1-4的顯示;
(3)當數碼管顯示1的時候,燈帶前面30個燈亮紅色,后面30個燈亮藍色;
(4)當數碼管顯示2的時候,燈帶以紅色和藍色交叉顯示,最前面為紅色;
(5)當數碼管顯示3的時候,燈帶以紅色和藍色交叉顯示,每隔0.5秒,紅色和藍色位置交換一次;
(6)當數碼管顯示4的時候,燈帶從中間位置向兩邊同時每隔0.1秒各點亮一個燈珠,向前點亮燈珠的顏色為紅色,向后點亮燈珠的顏色為藍色;
(7)如此循環。
判斷標準:
2分:實現“編程實現”中的(1);
5分:實現“編程實現”中的(2);
5分:實現“編程實現”中的(3);
5分:實現“編程實現”中的(4);
5分:實現“編程實現”中的(5);
5分:實現“編程實現”中的(6);
3分:完全符合題意。
1.審清題意,抓住關鍵點
“絢麗彩燈”的考點有分支選擇結構的嵌套、按鍵模塊的循環計數和燈帶的初始化設置及各種效果的實現。此外,還要注意數碼管的初始化和顯示控制方法。
(1)分支選擇結構的最“內層”嵌套是匹配按鍵模塊的1-4按下次數,對應控制數碼管最低位(3號)顯示該數字,以及燈帶的一種顯示效果。
(2)按鍵模塊的按下次數最大值為4,必須使用條件語句判斷其是否超出范圍,當該值大于4時需要使用賦值語句重新將其值改寫為1,進行下一次的循環。
(3)燈帶的60顆燈珠編號為0-59,每顆燈珠均可獨立控制其顯示顏色(也可用RGB值來控制);當數碼管分別顯示1-4時,對應燈帶的四種顯示效果中多次提到“前30、后30”、“中間位置”,編程時注意分別使用0-29和30-59來區分前后兩大組燈珠。
2.實驗器材的安裝
按照題目要求,首先將按鍵模塊接入25#引腳;燈帶需要接入18#引腳,注意燈帶的三根異色引線的標注,通常是紅色為+5V(電源正極)、白色為GND、綠色為Din(數字信號輸入),對應擴展板18#引腳的VCC、GND和D(數字端);由于燈帶接入18#引腳占用了IIC接口Up列一側的空間,因此數碼管必須要旋轉180度,接至IIC接口Down列對角線位置;最后,給樹莓派接通電源,啟動操作系統(如圖1)。

3.編程實現“絢麗彩燈”
(1)進入平臺編程環境
登錄古德微機器人平臺切換至“積木”編程區。
(2)編寫“初始化數碼管”函數
建立函數“初始化數碼管”,先關閉0-3號數碼管,再設置亮度為1(對四個數碼管均有效);最后設置3號數碼管顯示“0”(不顯示點),實現題目中(1)對數碼管“只有最后一位顯示0”的顯示要求(如圖2)。

(3)編寫“初始化燈帶”函數
燈帶的初始化操作需要先使用“設置GPIO18可控制燈帶60個燈并設置亮度為50”語句;然后構建一個循環結構,控制變量i從0增至59(步長為1),依次設置每個燈珠的顏色為黑色,實現題目中(1)對燈帶“熄滅”的要求(黑色即“熄滅”)。特別要注意的是,最后必須添加一條“燈帶刷新顯示”語句,否則之前對燈帶的設置控制均是無效的(如圖3)。

(4)構建循環結構中的多分支選擇嵌套結構
在主程序中分別調用“初始化數碼管”和“初始化燈帶”函數后,建立變量“數字”并賦值為0,用來存儲按鍵次數(數字1-4);接著建立“重復當真”的循環結構,進行外層分支選擇的判斷,條件為是否從25號按鍵獲取到“按下”動作;然后,將變量“數字”進行“自增1”賦值運算,并且通過一個“如果…執行…”語句設置其運算規律(大于4時重新“回歸”為1);通過“設置3號數碼管顯示‘數字,并顯示點‘0”語句,將變量數字的值根據變化(1、2、3、4)均在數碼管的最低位上顯示輸出。
建立“如果…執行…否則如果…執行……”四分支選擇結構,準備實現題目中(3)-(6)所要求的燈帶四種顯示效果:
①當數字為1時,為了實現“前面30個燈亮紅色、后面30個燈亮藍色”(注意二者應該是同步進行的)效果,應該只建立一個循環結構來控制兩組燈珠;如果是兩個循環結構來分別控制兩組燈珠的話,效果就變成了先亮一組30個、再亮另一組30個。控制變量i從初值0自增至終值29(步長為1),前30個燈珠設置為亮紅色;后30個燈珠的序號是在前30個的基礎上對應“加30”,即“i+30”,設置為亮藍色。切記:最后一定要添加一條“燈帶刷新顯示”語句(下同),控制燈帶發光。
②當數字為2時,為了實現“以紅色和藍色交叉顯示且最前面為紅色”效果,同樣是只建立一個循環結構,注意變量i的取值范圍是從0至59,步長設置為2(實現奇偶數燈珠的“交叉”控制);排序為奇數的燈珠(編號為i)發光顏色設置為紅色,偶數燈珠(編號為“i+1”)發光顏色設置為藍色。
③當數字為3時,為了實現“以紅色和藍色交叉顯示,每隔0.5秒,紅色和藍色位置交換一次”效果,需要建立兩個循環結構;相當于重復執行了兩次“數字為2時”的操作:先奇數燈珠發紅光、偶數燈珠發藍光,完成后停頓0.5秒,再奇數燈珠發藍光、偶數燈珠發紅光。
④當數字為4時,為了實現“從中間位置向兩邊同時每隔0.1秒各點亮一個燈珠,向前點亮燈珠的顏色為紅色,向后點亮燈珠的顏色為藍色”效果,同樣是使用一個循環結構,注意變量i的取值范圍是從29至0(“每隔1”:步長為-1),第一組是從第29個燈珠向前發紅光,第二組是從第30個燈珠向后發藍光——特別要注意該組的編號構建規則算式是“59-i”(如圖4)。

(5)其他細節
不管是主程序循環結構的最后,還是各分支選擇結構的最后(個別的還有中間位置),都需要考慮是否應該添加等待語句,作用同樣是防止循環過多和過快地占用系統資源。
4.運行程序,檢測“絢麗彩燈”

在平臺編程環境中點擊“連接設備”,正常的話再點擊“運行”按鈕,對照題目進行多次測試,不斷按下按鍵,數碼管重復顯示1、2、3、4,同時燈帶也進行亮紅燈和藍燈等不同效果的對應顯示,實現了題目要求。
最后將程序按照要求保存為“04.txt”,下載并上傳至考試系統中即可。