牟曉東
本文以模擬題“電子測距儀”為例,進行題目解析。
第三題“電子測距儀”(難度系數(shù)3,25個計分點):
在日常生活中,我們經(jīng)常會需要測量距離,電子測距儀作為一種測距設備,可以很方便地幫助我們測出距離,現(xiàn)制作一個簡易的電子測距儀。
1個按鍵模塊【接入25#引腳】,1個數(shù)碼管【接入IIC接口】,1個超聲波傳感器【接入超聲波專用接口】,杜邦線若干。
編程實現(xiàn):
(1)程序開始時,數(shù)碼管沒有顯示;
(2)當按鍵按下并且按住時,數(shù)碼管顯示當前設備測試的距離值(只顯示整數(shù)部分),測量顯示的距離范圍為2-400cm;
(3)當測量到的距離大于400或者小于2cm時,數(shù)碼管顯示4個0;
(4)當按鍵松開時,數(shù)碼管不顯示;
(5)如此循環(huán)。
3分:實現(xiàn)“編程實現(xiàn)”中的(1);
5分:實現(xiàn)“編程實現(xiàn)”中的(2);
7分:實現(xiàn)“編程實現(xiàn)”中的(3);
5分:實現(xiàn)“編程實現(xiàn)”中的(4);
5分:完全符合題意。
“電子測距儀”的關鍵考點是使用分支選擇結構的嵌套,將超聲波傳感器檢測到的不同范圍距離值在數(shù)碼管上進行顯示;另外,還必須要特別注意數(shù)碼管的使用前設置(如先關閉再調節(jié)亮度等),以及如何單獨控制各個數(shù)字位的數(shù)據(jù)顯示。
(1)通常使用的HC-SR04超聲波傳感器的有效測距范圍為2-400cm,數(shù)碼管則最多可顯示四位數(shù)字;因此,題目中的要求(2)其實也只是使用了右側的1號、2號和3號低位數(shù)碼管,最左側的0號是處于“空閑”狀態(tài)。
(2)超聲波傳感器進行測距的返回值為9位小數(shù),必須在輸出至數(shù)碼管顯示前進行“取整”操作;還要將這個三位數(shù)進行百位、十位和個位的逐一“分解”,分別輸出至數(shù)碼管的1號、2號、3號,這步操作是該題的難點,需要使用數(shù)學中的“除法”和“取余數(shù)”相結合的操作方法來實現(xiàn)。
(3)按鍵的編程控制部分需要使用“獲取25號按鈕檢測結果”語句,其返回結果為0和1,分別對應“松開”和“按下”兩種狀態(tài)。
按照題目要求,將按鍵模塊接入25號的三個引腳;超聲波傳感器有四個引腳,接入專用接口(擴展板的20和21號);將數(shù)碼管的四個引腳(VCC、GND、SCL和SDA)接入IIC接口(Up列);最后,給樹莓派接通電源,啟動操作系統(tǒng)(如圖1)。
(1)進入平臺編程環(huán)境
訪問古德微機器人平臺(www.gdwrobot.cn)。
(2)數(shù)碼管的“預處理”
數(shù)碼管在調用前必須要先進行“關閉”的操作,而且題目(4)也明確有“按鍵松開時不顯示”的要求;由于數(shù)碼管的關閉需要逐個進行,為減少代碼數(shù)量,此時應該考慮建立函數(shù)“關閉數(shù)碼管”,順序關閉0-3號數(shù)碼管。同時,在程序開始調用該函數(shù)后,添加一條“設置0號數(shù)碼管的亮度為1”語句。
(3)構建“外層”分支選擇結構
建立變量“按鍵”,為其賦值為“獲取25號按鈕檢測結果”;接著建立“如果…執(zhí)行…否則…”分支選擇結構,對變量“按鍵”的值是否為1進行判斷,是的話表示為“按下”狀態(tài),準備實現(xiàn)題目中(2)和(3)的要求;否的話(值為0),關閉數(shù)碼管顯示,實現(xiàn)題目中(4)的要求。
(4)構建“內層”分支選擇結構
如果判斷按鍵為“按下”的狀態(tài),則建立變量“距離”,賦值為“超聲波測距”,并且增加“獲取整數(shù)”處理后進行調試信息的LOG區(qū)輸出;接著再構建“如果…執(zhí)行…否則…”分支選擇結構,判斷超聲波測量的距離值是否在2-400cm的正常測量范圍內;否的話,使用“設置0/1/2/3號數(shù)碼管顯示0”四個語句,控制顯示4個0,實現(xiàn)題目(3)的要求;是的話,建立變量“百位”、“十位”和“個位”:
為變量“百位”賦值為“距離除以100”,取出該三位數(shù)的最高位;
為變量“十位”賦值為先“距離除以100”后取余數(shù)、再將余數(shù)“除以10”;
為變量“個位”賦值為先“距離除以10”、再將商“取余數(shù)”。
最后,分別使用三個“設置1/2/3號數(shù)碼管顯示百位/十位/個位”,其中的“并顯示點0”的意思是控制不顯示數(shù)碼管中的小數(shù)點。
(5)完善細節(jié)
將相關語句按照題目要求放置于“重復當真”的循環(huán)結構中,在循環(huán)體內的兩層分支選擇結構的最后均添加一條“等待0.1秒”語句,防止循環(huán)過快(如圖2)。
在平臺編程環(huán)境中點擊“連接設備”,正常的話再點擊“運行”按鈕,對照題目中的各種情況進行多次測試,包括程序開始和按鍵松開時“數(shù)碼管不顯示”、按鍵按下并且按住時的正常測距范圍(2-400cm)顯示實際測量值與超范圍時顯示4個0(如圖3),均實現(xiàn)了題目要求。
最后將程序按照要求保存為“03.txt”,下載并上傳至考試系統(tǒng)中即可。
程序代碼仍然可以進行兩處改寫“升級”:
一是不建立變量“按鍵”,直接在外層分支選擇結構中將“獲取25號按鈕檢測結果”作為判斷條件,因為該返回值只有0和1,與按鍵的“松開”與“按下”是對應的——數(shù)值“1”在很多編程語言中都是表示邏輯真;二是將數(shù)碼管顯示0的四行語句從主程序中去除,將它們增加至新函數(shù)“數(shù)碼管顯示0”中,雖然在主程序中只調用一次,但整體的簡潔性會更好(如圖4)。
再次運行程序,同樣也能夠實現(xiàn)題目要求。