牟曉東
我們在使用電腦時,可以在播放音樂的同時進行文字編輯和PPT制作,其實這種同時運行多個軟件的能力,就是系統(tǒng)的“多線程”——“并發(fā)執(zhí)行”運行機制。它可以直接理解為“同時”、“并行”,多個線程任務(wù)同時在運行但相互間幾乎沒有干擾。幾乎所有的編程語言都提供有“多線程”編程方式,比如在Python中是通過threading模塊來創(chuàng)建線程和調(diào)用方法來實現(xiàn)多線程的,但對于很多初學(xué)者(比如中學(xué)生)而言這是有一定難度的。如果用樹莓派+古德微的“積木”圖形化硬件編程的話,理解和使用起來就顯得容易得多,而且可以解決許多單純使用單線程較難解決的問題,在此以實現(xiàn)“不同頻”閃爍LED燈陣和“雙向”警報器為例。
1. 實驗?zāi)康募捌鞑倪B接
通過多線程運行方式控制四支LED燈同時閃爍,但各自的頻率不同:第一支亮0.1秒、再滅0.1秒,第二支亮0.2秒、再滅0.2秒,第三支亮0.5秒、再滅0.5秒,第四支亮1秒、再滅1秒。
先將古德微擴展板正確插入樹莓派(注意四周均勻小心用力),再將紅綠黃藍四支異色LED燈分別插入到5號、6號、12號和16號插孔(注意LED燈的長腳為正極、短腳為負極),最后給樹莓派通電啟動系統(tǒng)。
2. 實驗步驟
(1)在瀏覽器中訪問古德微機器人平臺(http://www.gdwrobot.cn),登錄后點擊“設(shè)備控制”進入“積木”編程界面并進行“連接設(shè)備”操作。
建立四個子線程,名稱分別為LED5、LED6、LED12和LED16(注意既不能使用中文命名也區(qū)分英文大小寫),分別對應(yīng)四個同名的子函數(shù),每個子函數(shù)分別控制對應(yīng)的LED燈進行亮滅交替——通過設(shè)置不同的等待時間來實現(xiàn)不同的閃爍頻率。各自的亮、滅等待時間分別為0.1秒、0.2秒、0.5秒和1秒(如圖1)。
(2) 該程序在運行時,左側(cè)的四個子線程會在極短時間內(nèi)依次得到“執(zhí)行”的權(quán)限,而每個子線程都會獨自快速去調(diào)用自己所對應(yīng)的子函數(shù),于是宏觀上就相當于四個子線程對應(yīng)四個子函數(shù)在多線程運行,就會達到四支LED同時以各自的頻率在閃爍的實驗效果。點擊“運行”按鈕進測試,四支LED燈互不干擾地以各自的頻率進行閃爍(如圖2)。
1. 實驗?zāi)康募捌鞑倪B接
通過多線程運行方式分別控制超聲波傳感器檢測前方障礙物距離并控制蜂鳴器報警,同時實現(xiàn)紅外線傳感器檢測上方障礙物并控制LED燈亮報警。
先將一支紅色LED燈插入古德微擴展板5號插孔,再將紅外線傳感器插入24號插孔(注意電源正極VCC、接地GND和信號輸出OUT三個引腳正確對應(yīng));接著,將超聲波傳感器插入20、21號插孔(注意四個引腳與擴展板插孔也要正確對應(yīng));借助三根公對母杜邦線將低電平觸發(fā)(3.3V)的蜂鳴器連接好(I/O端接入25號插孔的D數(shù)據(jù)端),最后給樹莓派通電啟動系統(tǒng)。
2. 實驗步驟
(1) 在古德微機器人平臺中建立兩個子線程,分別為Speaker和Led,同樣對應(yīng)同名的子函數(shù),功能分別是超聲波檢測障礙物距離報警和紅外線檢測障礙物報警。前者通過變量“超聲波”的數(shù)值是否小于10來進行條件判斷,成立的話則進行文字信息警示“警報:前方危險!”,并且控制蜂鳴器在“沒電”和“有電”間切換(產(chǎn)生嘀嘀聲);后者通過變量“紅外線”的數(shù)值是否為0來進行條件判斷,成立的話同樣也進行文字信息警示“注意:上邊兒有人!”,并且控制5號紅色LED燈閃爍(如圖3)。
(2) 該程序在運行時,Speaker和Led子線程就會像第一個案例中的四個控制LED燈閃爍的子線程一樣,去調(diào)用對應(yīng)的同名子函數(shù),使得超聲波檢測障礙物距離報警和紅外線檢測障礙物報警均處于“監(jiān)聽”狀態(tài)。當二者中任意一個或都有障礙物進入檢測范圍時,就會觸發(fā)對應(yīng)的蜂鳴器或LED燈進行報警,互不干擾(如圖4)。