版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章基于樹莓派的圖形化在線編程電子設(shè)計基礎(chǔ)與創(chuàng)新實踐教程01基于樹莓派的圖形化在線編程平臺PARTONE樹莓派樹莓派(RaspberryPi)是由樹莓派基金會開發(fā)的一種基于Linux系統(tǒng)的微型計算機(jī),以SD/MicroSD卡為內(nèi)存硬盤,卡片主板周圍有1/2/4個USB接口和一個10/100Mbit/s以太網(wǎng)接口(A型沒有網(wǎng)口),可連接鍵盤、鼠標(biāo)和網(wǎng)線,同時擁有視頻模擬信號的電視輸出接口和高清視頻輸出接口HDMI等,以上部件被全部整合在一張比信用卡稍大的主板上,具備所有個人計算機(jī)的基本功能,只需連接電視機(jī)或者顯示屏及鼠標(biāo)、鍵盤,就能執(zhí)行如電子表格、文字處理、玩游戲、播放高清視頻等諸多功能。其選型表如表所示。圖示為最新款的RaspberryPi4ModelB。RaspberryPi4ModelB搭載了一顆工作頻率為1.5GHz的64位ARMCortex-A72四核處理器,有1GB、2GB、4GB的LPDDR4RAM可供選擇,具有H.265硬件解碼器(可達(dá)4Kp60)及H.264硬件解碼器(可達(dá)1080p60),VideoCoreVI3D圖形加速器,支持高達(dá)4Kp60的雙HDMI顯示器輸出,支持802.11b/g/n/ac的無線(Wi-Fi)模塊和BLE5.0的藍(lán)牙模塊。其外設(shè)接口也很豐富,包括1個SD卡接口、2個支持4Kp60顯示器的micro-HDMI接口、2個USB2.0接口、2個USB3.0接口,1個千兆以太網(wǎng)接口、1個雙通道MIPICSI樹莓派攝像頭接口,1個雙通道MIPIDSI樹莓派顯示接口,28個用戶可自定義的GPIO口,1個5VDCUSB-C電源接口(供電口)。杭州古德微機(jī)器人有限公司自主研發(fā)的基于樹莓派的圖形化編程平臺,以可視化的積木進(jìn)行模塊化編程,結(jié)合樹莓派及各類傳感器、顯示器、執(zhí)行機(jī)構(gòu)等硬件模塊,大大降低了嵌入式系統(tǒng)開發(fā)的難度,讓使用者可以快速搭建一個嵌入式系統(tǒng),并且可采用各種移動終端設(shè)備進(jìn)行在線編程。圖形化在線編程平臺開發(fā)環(huán)境的搭建有以下兩種方式可開啟在線編程平臺。第一種方式:在樹莓派的接口上接上鼠標(biāo)、鍵盤、存儲卡、顯示器,然后開機(jī)進(jìn)入自帶的Linux操作系統(tǒng),連接互聯(lián)網(wǎng),用瀏覽器打開古德微機(jī)器人網(wǎng)站,進(jìn)入在線編程平臺,登錄界面如圖所示。第二種方式:不需給樹莓派外接鼠標(biāo)、鍵盤、顯示器,直接開啟樹莓派,用個人計算機(jī)或移動設(shè)備開啟谷歌瀏覽器并輸入網(wǎng)址,進(jìn)入在線編程平臺,通過互聯(lián)網(wǎng)在線控制樹莓派,要保證個人計算機(jī)或移動設(shè)備與樹莓派在同一個局域網(wǎng)中。輸入賬號、密碼即可進(jìn)入在線編程平臺的歡迎界面。單擊“設(shè)備控制”,即進(jìn)入在線編程平臺的編程界面。單擊“連接設(shè)備”,會在右側(cè)出現(xiàn)5個綠色“√”,說明設(shè)備連接成功。在線編程界面的功能區(qū)域劃分:左側(cè)為積木塊區(qū),里面存放著各種編程積木;上方為功能區(qū),包括攝像頭拍照的圖像預(yù)覽、版本信息、更多功能(合成視頻、控件控制、采集數(shù)據(jù)、模擬訓(xùn)練、機(jī)器學(xué)習(xí)等)、運(yùn)行、停止等按鈕;右側(cè)為上傳文件、分享代碼、代碼庫等按鈕。①編程:從左側(cè)積木塊區(qū)找到相應(yīng)的積木塊,按鼠標(biāo)左鍵拖至中間編程區(qū)進(jìn)行組合即可。②復(fù)制積木:選中要復(fù)制的積木,右擊,選擇“復(fù)制”,或者先按Ctrl+C鍵,再按Ctrl+V鍵。③刪除積木:有以下四種方式可以刪除積木。? 選中要刪除的積木塊,右擊,選擇“刪除X塊”。? 選中要刪除的積木塊,按Delete鍵。? 選中要刪除的積木塊,拖至右下方“垃圾桶”。? 選中要刪除的積木塊,拖至界面左邊后松開鼠標(biāo)左鍵。如果要刪除全部積木,右擊編程區(qū)空白處,選擇“刪除X塊”即可。在線編程界面功能介紹④撤銷:右擊編程區(qū)空白處,選擇“撤銷”或者按Ctrl+Z鍵。⑤折疊積木:選中要折疊的積木塊,右擊,選擇“折疊塊”;如果要折疊全部積木,右擊編程區(qū)空白處,選擇“折疊塊”。⑥展開積木:選中要展開的積木塊,右擊,選擇“展開塊”;如果要展開全部積木,右擊編程區(qū)空白處,選擇“展開塊”。⑦整理積木:右擊編程區(qū)空白處,選擇“整理塊”,則積木塊按從上到下的順序排列整齊。⑧禁用積木:選中要禁用的積木塊,右擊,選擇“禁用塊”。⑨啟用積木:選中要啟用的積木塊,右擊,選擇“啟用塊”。⑩保存代碼:單擊功能區(qū)“保存”,彈出對話框,輸入保存的文件名即可。?代碼運(yùn)行:單擊功能區(qū)“運(yùn)行”。?代碼停止運(yùn)行:單擊功能區(qū)“停止運(yùn)行”。?分享代碼:單擊右側(cè)“分享代碼”,彈出對話框,輸入賬號即可。?代碼庫:包含儲存的代碼、分享的代碼、被分享的代碼等,可以在該界面搜索代碼、給代碼重新命名、刪除代碼、下載代碼(文本格式)等,如圖9-1-9所示。代碼儲存在服務(wù)器上,即使樹莓派斷電,程序也不會丟失。在線編程界面功能介紹由于小燈的陰極接地,陽極通過一個限流電阻接在GPIO口上,當(dāng)在GPIO口上輸入高電平時,小燈就會被點亮。在編程平臺積木區(qū)找到“智能硬件→常用→”拖入編程區(qū),調(diào)整端口號及亮滅控制功能,單擊“運(yùn)行”按鈕,即可控制5號小燈亮起來。RaspberryPi4ModelB共有40個引腳,具體引腳圖如圖所示,接入古德微樹莓派擴(kuò)展板(簡稱擴(kuò)展板),該擴(kuò)展板集成了一個16位4通道ADC(A0~A3通道)、2個按鈕(GPIO25、GPIO26)、4個LED小燈(GPIO5、GPIO6、GPIO12、GPIO16)、1個蜂鳴器(GPIO19)、1個溫度傳感器(接在ADC-A3通道上)、1個光敏傳感器,并且預(yù)留了超聲波接口(GPIO20、GPIO21)、2個IIC接口、SPI接口、循跡接口及多個GPIO口的排針接口(GPIO7、GPIO18、GPIO14、GPIO15、GPIO23)及3.3V、5V、GND排針接口,可以方便地接入各類傳感器、顯示器及執(zhí)行機(jī)構(gòu)等,構(gòu)成一個嵌入式系統(tǒng)。擴(kuò)展板接口布局圖如圖所示。。點亮一個小燈02Python程序設(shè)計基礎(chǔ)PARTONE標(biāo)識符和保留字符在古德微圖形化編程平臺上進(jìn)行的是基于Python的圖形化編程,它的語法結(jié)構(gòu)與Python
3一致。在Python里,標(biāo)識符由字母、數(shù)字、下畫線組成,但不能以數(shù)字開頭。并且Python里的標(biāo)識符是區(qū)分大小寫的。Python里有一些保留字符不能用作常量名或變量名。在圖形化編程平臺編程界面左側(cè)積木區(qū)找到“變量→創(chuàng)建變量”,在對話框中輸入變量名即可新建一個變量積木塊。變量的數(shù)據(jù)類型變量存儲在內(nèi)存中,這就意味著在創(chuàng)建變量時會在內(nèi)存中開辟一個空間。根據(jù)變量的數(shù)據(jù)類型,解釋器會分配指定的內(nèi)存,并決定什么數(shù)據(jù)可以存儲在內(nèi)存中。因此,可以為變量指定不同的數(shù)據(jù)類型,這些變量可以存儲整數(shù)、小數(shù)或字符等。Python3有六個標(biāo)準(zhǔn)的數(shù)據(jù)類型,其所對應(yīng)的積木塊如表所示。運(yùn)算符Python3支持多種類型的運(yùn)算符1.算術(shù)運(yùn)算符Python3除支持基本的運(yùn)算符之外,還支持math庫,里面包含了常用數(shù)學(xué)函數(shù)。2.比較(關(guān)系)運(yùn)算符Python3支持的比較(關(guān)系)運(yùn)算符如表所示。運(yùn)算符3.賦值運(yùn)算符Python3支持的賦值運(yùn)算符如表所示。4.位運(yùn)算符Python3支持的位運(yùn)算符如表所示。Number(數(shù)字)Python3支持int、float、complex三種數(shù)字類型。其中bool型(True、False)是int型的子類。有時候我們需要對數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,int(x)將x轉(zhuǎn)換為一個整數(shù)(“數(shù)學(xué)”→);float(x)將x轉(zhuǎn)化成浮點數(shù)(“數(shù)學(xué)”→);complex(x)將x轉(zhuǎn)化成復(fù)數(shù),x為實部,虛部為0;complex(x,y)將x,y轉(zhuǎn)化成復(fù)數(shù),x為實部,y為虛部。Python3提供了一些隨機(jī)數(shù)函數(shù)及一些數(shù)學(xué)常量,如表所示。Number(數(shù)字)Python3支持int、float、complex三種數(shù)字類型。其中bool型(True、False)是int型的子類。有時候我們需要對數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,int(x)將x轉(zhuǎn)換為一個整數(shù)(“數(shù)學(xué)”→);float(x)將x轉(zhuǎn)化成浮點數(shù)(“數(shù)學(xué)”→);complex(x)將x轉(zhuǎn)化成復(fù)數(shù),x為實部,虛部為0;complex(x,y)將x,y轉(zhuǎn)化成復(fù)數(shù),x為實部,y為虛部。Python3提供了一些隨機(jī)數(shù)函數(shù)及一些數(shù)學(xué)常量,如表所示。String(字符串)字符串是Python中常見的數(shù)據(jù)類型,我們用'
'或"
"來創(chuàng)建字符串。可以在雙引號包裹的字符串中使用單引號,或者在單引號包裹的字符串中使用雙引號。Python允許空字符串的存在,并且在使用一些特殊字符時用轉(zhuǎn)義字符“\”實現(xiàn)。字符串常用操作符及內(nèi)置函數(shù)如表所示。字符串是一種序列,序列中的每個數(shù)據(jù)都被分配了一個序號,可以通過這個序號訪問每個數(shù)據(jù),這個序號稱為索引值,索引值從0開始分配,-1是從末尾開始分配的位置。Python用[]來訪問序列里面的數(shù)據(jù),如果是單個數(shù)據(jù),只需在[]中填入索引號即可,例如圖所示的序列,str[0]='H'、str[2]='L'、str[-1]='O';如果訪問一段數(shù)據(jù),可以用切片的方式,在[]里用冒號分隔,即[:],冒號前面的索引值代表切片開始的位置,后面的索引值代表切到該索引值的前面為止,如果冒號前面沒有索引值,表示從0號開始切片;如果冒號后面沒有索引值,表示切至最后。List(列表)列表與字符串一樣,也是一種序列,列表中的元素可以是不同的數(shù)據(jù)類型的元素,元素之間用逗號分隔,其操作方法與前述9.2.5節(jié)對于字符串的操作是一致的,并且列表是可修改的序列。列表常用操作符及內(nèi)置函數(shù)如表所示。Tuple(元組)元組和列表類似,可以是任何數(shù)據(jù)類型的序列,但是它和字符串一樣不能被修改。和列表類似,元組可以用元組的字面量或者tuble()來創(chuàng)建,元組的字面量用圓括號“()”括住。通常使用下標(biāo)來訪問元組的值,元組的值不能被修改,但是可以組合和復(fù)制及查詢;元組也可以被索引及截?。ㄇ衅?,其操作與列表等序列類似。Set(集合)集合是一種無序不重復(fù)元素的容器,可以動態(tài)地加入新的元素或者刪除元素。集合的字面量用“{}”括住。直接給一個變量賦值一個集合字面量或者用set(),可以創(chuàng)建一個集合。創(chuàng)建一個空的集合只能用set(),一個空的{}是用來創(chuàng)建空字典的(見9.2.9節(jié))。集合常用運(yùn)算符及內(nèi)置函數(shù)如表所示。Dictionary(字典)字典是一個用“key”來索引數(shù)據(jù)的集合,可以存放任意數(shù)據(jù)類型的數(shù)據(jù),它的字面量是{key:value}。字典的元素用逗號分隔,每個元素的key必須是唯一的,且不可變,key可以由數(shù)字、字符串、元組充當(dāng),而value不必唯一,并且可以是任意數(shù)據(jù)類型的。可以通過“{}”來創(chuàng)建一個空字典,也可以用內(nèi)置函數(shù)dict()創(chuàng)建。字典常用操作符及內(nèi)置函數(shù)如表所示。計算機(jī)程序主要有三種結(jié)構(gòu):Sequence(順序)、Repetition(循環(huán))和Decision(分支)。1.Sequence(順序)結(jié)構(gòu)順序結(jié)構(gòu):程序按照出現(xiàn)的先后順序執(zhí)行。2.Repetition(循環(huán))結(jié)構(gòu)循環(huán)結(jié)構(gòu):程序反復(fù)執(zhí)行某個操作,直到某條件成立時終止循環(huán)。Python中的循環(huán)有兩種:while循環(huán)和for循環(huán)。在原理圖設(shè)計界面中,結(jié)合前期準(zhǔn)備的器件的數(shù)據(jù)手冊完成項目電路設(shè)計,檢查無誤后即可導(dǎo)入元器件,進(jìn)入PCB文件中進(jìn)行下一步設(shè)計。while循環(huán)中可以通過設(shè)置條件表達(dá)式永遠(yuǎn)為True來實現(xiàn)無限循環(huán)。Python中的for循環(huán)可以遍歷任何可迭代對象,例如一個列表或者字符串,如果要遍歷數(shù)字序列,可以使用內(nèi)置函數(shù)range(),它會生成數(shù)列。break語句用來跳出for循環(huán)和while循環(huán),continue語句用來跳過當(dāng)前循環(huán)塊中的剩余語句,然后繼續(xù)進(jìn)行下一輪循環(huán)。程序設(shè)計的基本結(jié)構(gòu)3.Decision(分支)結(jié)構(gòu)分支結(jié)構(gòu):根據(jù)某一特定條件選擇其中的一個分支執(zhí)行。程序設(shè)計的基本結(jié)構(gòu)函數(shù)是可重復(fù)使用的,用來實現(xiàn)一定功能的代碼段。Python有很多內(nèi)置函數(shù),用戶也可以自定義函數(shù)。函數(shù)代碼塊以關(guān)鍵詞def開頭,后面是函數(shù)名和“()”,傳入的參數(shù)和自變量放在“()”里面,函數(shù)內(nèi)容以“:”開始,并且縮進(jìn),其一般格式如表所示。如果函數(shù)帶返回值,則以return[表達(dá)式]結(jié)束,如果return不帶表達(dá)式,相當(dāng)于返回None。函數(shù)(Function)Python3中多線程類似于同時執(zhí)行多個不同的程序,使用線程可以把運(yùn)行時間長的任務(wù)放到后臺去處理。線程不能獨立運(yùn)行,由應(yīng)用程序控制線程的執(zhí)行。先為線程定義一個函數(shù),再通過調(diào)用_thread模塊中的start_new_thread()函數(shù)來產(chǎn)生新的線程。線程的建立與終止語法格式如表所示。多線程03GPIO口的使用PARTONEGPIO口GPIO(GeneralPurposeInput/Output,通用輸入/輸出)口,可以用于輸入,也可以用于輸出,或者用于輸入/輸出,有的引腳可以實現(xiàn)PWM(PulseWidthModulation,脈沖寬度調(diào)制)功能。RaspberryPi4ModelB引腳可承受的電壓為3.3V,超過這個電壓會損壞樹莓派。如果希望實現(xiàn)擴(kuò)展板上分別接在GPIO5、GPIO6、GPIO12、GPIO16
上的四個小燈依次亮滅,可以如圖這樣來實現(xiàn)。如果要控制的小燈很多,這樣書寫的程序就會冗長,每個小燈完成的事情都是一樣的,計算機(jī)就特別擅長處理一些簡單而重復(fù)的工作,我們可以用循環(huán)來實現(xiàn)。但是小燈的端口號是無序的,我們可以把端口號放到有序的容器——列表中去,然后利用列表的遍歷來實現(xiàn)。(“基礎(chǔ)”里的積木塊與的作用一樣)這個地方需要注意的是,列表遍歷的位置是從[1,4]而不是[0,3]開始的,是由于積木塊封裝的時候做了+1處理。流水燈在9.1節(jié),我們介紹了擴(kuò)展板的硬件資源及接口,它集成了兩個按鈕,分別接在GPIO25、GPIO26(見圖9-1-11)上,其電路連接方式如圖所示,由圖可知,當(dāng)按鈕彈起時,端口電壓為0,當(dāng)按鈕按下時端口電壓為電阻上的分壓(≈V_"CC"),即按鈕彈起時,端口為低電平,按鈕按下時,端口為高電平。我們通過檢測GPIO25上的電平狀態(tài)來控制接在GPIO5上的小燈,按鈕按下時小燈亮起,按鈕彈起時小燈熄滅,在“智能硬件→常用”中找到按鈕檢測的相應(yīng)積木塊并組合語句,如圖所示,單擊“運(yùn)行”按鈕,會發(fā)現(xiàn)實現(xiàn)了上述功能。按鈕控制小燈如果我們希望增加一個按鈕,實現(xiàn)一個雙聯(lián)控的小燈(兩個按鈕控制同一個小燈的亮滅),可以增加對GPIO26上電平狀態(tài)的檢測,兩個按鈕任意一個按下都可以點亮小燈,這個邏輯關(guān)系是“或”,組合成積木塊程序如圖所示。如果希望實現(xiàn)GPIO25的按鈕按下時小燈亮起,再次按下時小燈熄滅,第三次按下時小燈重新亮起……這時候我們需要記錄下按鈕按下的次數(shù),并判斷按下次數(shù)的奇偶,奇數(shù)次亮起,偶數(shù)次熄滅,積木塊程序如圖所示。按鈕控制小燈我們發(fā)現(xiàn)每次按下按鈕,小燈連接的端口狀態(tài)都發(fā)生翻轉(zhuǎn),在“基礎(chǔ)”里找到,組合成積木塊程序如圖所示。如果希望實現(xiàn)GPIO25的按鈕按下,控制GPIO5、GPIO6、GPIO12、GPIO16上的四個小燈依次被點亮。我們需要記錄按鈕按下的次數(shù),并根據(jù)按下的次數(shù)對4取模(%4)進(jìn)行分類,每一類點亮一個燈,積木塊程序如圖所示。按鈕控制小燈該數(shù)碼管模塊由四位數(shù)碼管組成,通過IIC接口(SDA、SCL、GND、VCC)將4位數(shù)碼管模塊與擴(kuò)展板相連,如圖9-3-9所示,其基本操作積木塊如表所示。通過對積木塊的參數(shù)控制可以在數(shù)碼管上顯示數(shù)字及小數(shù)點、冒號等。在數(shù)碼管上顯示1234、12.34及12:34,積木塊程序分別如圖所示。如果要每隔0.1s動態(tài)顯示9999~0000的倒計時,則需要在4位數(shù)碼管上顯示動態(tài)變化的4位數(shù),但是每一位數(shù)碼管只能顯示一位整數(shù),所以需要把一個4位數(shù)轉(zhuǎn)化成為千位、百位、十位、個位的4個整數(shù),然后分別在4位數(shù)碼管上顯示出來,積木塊程序如圖所示。數(shù)碼管定時時鐘Python用函數(shù)time.time()來獲取當(dāng)前時間戳,每個時間戳都以從格林威治時間1970年01月01日00時00分00秒至當(dāng)前經(jīng)過多少時間來表示,通過time模塊下函數(shù)可以轉(zhuǎn)換常見日期格式,編程平臺相關(guān)積木塊存放在“時間”中。獲取當(dāng)前的“時”和“分”,并分別顯示在數(shù)碼管的0、1號位及2、3號位,并設(shè)定“定時時間”,定時時間(15:16)到,GPIO5的小燈開始閃爍,積木塊程序分別如圖所示。PWMPWM(PulseWidthModulation,脈沖寬度調(diào)制)是一種對模擬信號電平進(jìn)行數(shù)字編碼的方法。RaspberryPi4ModelB上有兩個PWM通道(PWM0、PWM1),對應(yīng)著4個GPIO口(GPIO12、GPIO13、GPIO18、GPIO19),能夠通過配置成PWM引腳去控制外部設(shè)備。另外,可以通過軟件模擬的方法實現(xiàn)任意GPIO口的PWM工作方式??梢栽诰幊唐脚_“基礎(chǔ)”中找到相關(guān)積木塊(當(dāng)鼠標(biāo)指針放置在積木塊上時,會有參數(shù)配置的相關(guān)提示),來調(diào)整PWM波的占空比(一個周期內(nèi)高電平時間與周期的比值)。呼吸燈改變GPIO5上的PWM參數(shù),小燈的亮度會發(fā)生變化,數(shù)值在[0,3000]逐漸增加,小燈由暗變亮。溫控風(fēng)扇將小風(fēng)扇接在GPIO18上。由圖知,擴(kuò)展板上集成了一個溫度傳感器(DS18B20),通過ADC的A3通道輸出數(shù)字量,通過“基礎(chǔ)”里的積木塊輸出調(diào)試信息,觀察輸出數(shù)據(jù)的類型。可知數(shù)據(jù)為當(dāng)前溫度×100的整數(shù)(26.69℃輸出2669),將該數(shù)據(jù)在數(shù)碼管上顯示出來,并添加點顯示為小數(shù)。利用“數(shù)學(xué)”中的積木塊,通過溫度值來控制GPIO18的PWM波的占空比值,從而控制風(fēng)扇的轉(zhuǎn)動速度,積木塊程序如圖所示。舵機(jī)舵機(jī)是一種位置(角度)伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。按角度變化范圍,舵機(jī)可分為180°舵機(jī)和360°舵機(jī)等。對于180°舵機(jī),通過調(diào)節(jié)輸出PWM波的占空比,可以調(diào)節(jié)舵機(jī)轉(zhuǎn)動的角度。對于360°舵機(jī),調(diào)節(jié)輸出PWM波的占空比,可以調(diào)節(jié)舵機(jī)轉(zhuǎn)動的方向及速度?!笆^&剪子&布”游戲設(shè)計“石頭&剪子&布”是我們生活中常見的一個小游戲,其規(guī)則為:石頭(Rock)>剪子(Scissors);剪子(Scissors)>布(Paper);布(Paper)>石頭(Rock),判決結(jié)果為贏(Win)、輸(Lost)、平(Draw)。我們分配兩個玩家:人(Man)和樹莓派(Computer),人(Man)通過三個按鈕(GPIO25、GPIO26、GPIO21)來進(jìn)行拳型的輸出,Computer(樹莓派)從三種拳型中隨機(jī)產(chǎn)生拳型,按照上述規(guī)則設(shè)計不同的判決算法來實現(xiàn)結(jié)果的判別。判決算法1:枚舉出所有的出拳情況(9種情況),然后逐一進(jìn)行判決結(jié)果的輸出?!笆^&剪子&布”游戲設(shè)計判決算法2:建立判決為Win的出拳情況列表[[1,2],[2,3],[3,1]]。首先判斷Man和Computer出拳是否相同,如果相同為平局,如果不同則查詢出拳情況列表[Man,Computer]是否是Win列表中的元素,如果是Win列表中的元素則判決為Win,否則為Lost。判決算法3:建立判決為Win的字典{1:2,2:3,3:1}。首先判斷Man和Computer出拳是否相同,如果相同為平局,如果不同則在判決字典中用Man作為key查詢對應(yīng)的value是否與Computer出拳情況相同,即“判決字典[Man]?=Computer”,如果相同則判決為Win,否則為Lost。判決算法4:用代數(shù)法,首先判斷Man和Computer出拳是否相同,如果相同為平局,如果不同則用Man-Computer對3取模,即(Man-Computer)%3?=-2,如果等于-2則判決為Win,否則為Lost。04Sensehat的應(yīng)用PARTONESensehatSensehat是一個樹莓派擴(kuò)展板,它有1個8×8的RGBLED矩陣屏、1個遙控桿,還集成有陀螺儀(±245/500/2000°/s)、加速計(±-2/4/8/16g)、磁傳感器(±4/8/12/16Oe)、溫度傳感器(0~65℃)、相對濕度傳感器、氣壓計(26kPa~126kPa)等傳感器,如圖9-4-1所示,常用積木塊如表所示。點陣屏Sensehat集成了一個8×8的RGBLED矩陣屏,通過相關(guān)積木塊可以點亮一個點、一個字符及一個字符串,并且可通過調(diào)節(jié)顏色參數(shù)(0~255)來改變顏色,也可以在“列表”中找到相關(guān)色塊,直接修改顯示的顏色。矩陣屏LED的坐標(biāo)如圖所示。用紅色顯示LED矩陣屏最外面一圈LED,積木塊程序如圖所示。遙控桿Sensehat右下角集成了1個遙控桿,遙控桿可以對上、下、左、右、按下5個動作進(jìn)行控制,通過相關(guān)積木塊可以返回對應(yīng)的字符串(“up”“down”“l(fā)eft”“right”“middle”),“移動”一個點通過遙控桿來控制矩陣屏的一個LED“移動”。要“移動”一個LED,本質(zhì)是獲取遙控桿的方向,熄滅之前的LED,重新點亮一個新的點,新點亮的點的方位與遙控桿的方向要保持一致。如果要將一個點從黃色位置移動到藍(lán)色位置,只需要熄滅黃色位置的點,重新點亮藍(lán)色位置的點,這樣這個點看起來就“移動”起來了。假定初始點亮的LED坐標(biāo)為(X=3,Y=3),遙控桿向上,需要點亮的LED坐標(biāo)變?yōu)椋╔=3,Y-1=2);遙控桿向下,需要點亮的LED坐標(biāo)變?yōu)椋?,Y+1=4);遙控桿向左,需要點亮的LED坐標(biāo)變?yōu)椋╔-1=2,3);遙控桿向右,需要點亮的LED坐標(biāo)變?yōu)椋╔+1=4,3)為了防止“移動”到外面,也就是LED坐標(biāo)越界,需要把“移動”完的LED坐標(biāo)限定在[0,7]內(nèi),可以通過“數(shù)學(xué)”里的積木塊
實現(xiàn)?!柏澇陨摺边@個小游戲通過控制蛇身的移動去吃蘋果,吃完一個蘋果,蛇身長度就自動增加,一個新的蘋果又會重新出現(xiàn)。如果要在SensehatLED矩陣屏上實現(xiàn),我們假定一個初始點為蛇身,坐標(biāo)為(蛇身X=3,蛇身Y=3),圖示的程序就是蛇身移動的程序。我們先實現(xiàn)蛇吃蘋果的程序(假定蛇吃蘋果,蛇身長度不增加),蘋果位置隨機(jī)出現(xiàn),移動蛇身,當(dāng)蛇身遇到蘋果,即(蛇身X=蘋果X&蛇身Y=蘋果Y),則蘋果重新產(chǎn)生。蛇身用綠色顯示,蘋果用紅色顯示。“貪吃蛇”游戲設(shè)計接下來我們考慮如何讓貪吃蛇吃蘋果增加蛇身長度,如果要增加蛇身的長度就需要解決以下幾個問題:①蛇身坐標(biāo)的儲存。②蛇身移動時坐標(biāo)的變化,包括吃到蘋果和沒吃到蘋果的情況。③蛇身的刷新顯示。第1個問題,最簡單的一個點的蛇身有蛇身X、蛇身Y兩個坐標(biāo)需要保存,每增加一個點就多兩個坐標(biāo)需要保存,根據(jù)9.2節(jié)內(nèi)容可知字符串、列表都是一種序列,可以儲存數(shù)據(jù)并且按順序排列好,通過索引值可找到所需數(shù)據(jù)。本案例采用列表的方式來儲存、提取數(shù)據(jù)。第2個問題,移動蛇身坐標(biāo)變化情況,又分為吃到蘋果時增加蛇身坐標(biāo)及沒吃到蘋果時蛇身坐標(biāo)更新兩種情況。如果是吃到蘋果時增加蛇身坐標(biāo),只需要在蛇身列表中添加新的元素即可。如果沒吃到蘋果時蛇身坐標(biāo)需要更新,可在蛇身列表中先添加新的坐標(biāo)元素,然后丟掉第一個點的坐標(biāo)即可。假定蛇身初始位置在(3,3),向右走一步,蛇身位置變?yōu)椋?,3。“貪吃蛇”游戲設(shè)計第3個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 14124-2024機(jī)械振動與沖擊固定建筑結(jié)構(gòu)的振動振動測量及對結(jié)構(gòu)影響評價的指南
- PB-22-8-Hydroxyisoquinoline-isomer-生命科學(xué)試劑-MCE-5052
- Lariciresinol-4-O-β-D-glucopyranoside-生命科學(xué)試劑-MCE-5846
- E3-Ligase-Ligand-linker-Conjugate-122-生命科學(xué)試劑-MCE-1944
- 二零二五年度航空航天產(chǎn)業(yè)融資合作協(xié)議書
- 二零二五年度用人單位與派遣公司國際化人才派遣服務(wù)協(xié)議
- 2025年度音樂制作與音樂版權(quán)許可合同
- 2025年度活動板房銷售與臨時辦公場所租賃合同
- 二零二五年度商業(yè)地產(chǎn)貸款合同范本
- 2025年度飯店短期餐飲服務(wù)員勞務(wù)派遣協(xié)議
- 2025年廣州中醫(yī)藥大學(xué)順德醫(yī)院(佛山市順德區(qū)中醫(yī)院)招考聘用高頻重點提升(共500題)附帶答案詳解
- 2025年華僑港澳臺學(xué)生聯(lián)招考試英語試卷試題(含答案詳解)
- 2025-2030年中國美容院行業(yè)營銷創(chuàng)新戰(zhàn)略制定與實施研究報告
- 2024-2025學(xué)年北京石景山區(qū)九年級初三(上)期末語文試卷(含答案)
- 第一章 整式的乘除 單元測試(含答案) 2024-2025學(xué)年北師大版數(shù)學(xué)七年級下冊
- 藥品流通監(jiān)管培訓(xùn)
- JD37-009-2024 山東省存量更新片區(qū)城市設(shè)計編制技術(shù)導(dǎo)則
- 中國高血壓防治指南(2024年修訂版)
- 北京市海淀區(qū)重點中學(xué)2025屆高考數(shù)學(xué)押題試卷含解析
- 2024EPC施工總包合同范本
- GB/Z 44765.3-2024用戶端能源管理系統(tǒng)和電網(wǎng)側(cè)管理系統(tǒng)間的接口第3部分:架構(gòu)
評論
0/150
提交評論