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