構(gòu)建一個(gè)游戲控制器,通過(guò)BLE連接到CYW20829,橋接到CAN FD,在連接顯示器的XMC71上玩乒乓風(fēng)格的游戲
該項(xiàng)目涉及兩塊電路板:CYW920829M2EVK-02,它通過(guò)藍(lán)牙低功耗(BLE)連接到游戲控制器,以及KIT_XMC71_EVK_LITE_V1。
它支持第三代或更高版本的Xbox控制器或英飛凌的XENSIV游戲控制器,通過(guò)帶有CAN FD Shield TLE9371VSJ的CAN FD總線將數(shù)據(jù)傳輸?shù)終IT_XMC71_EVK_LITE_V1板。后者處理數(shù)據(jù)并使用自定義圖形適配器XMC71_EVK_DisplayAdapter_V11在屏幕上顯示受Pong啟發(fā)的演示游戲。
硬件
在運(yùn)行代碼之前,請(qǐng)確保所有硬件組件都已正確連接和配置。按照以下步驟設(shè)置硬件:
1. 通過(guò)將XMC71套件的J23頭連接到顯示適配器的J23頭,將XMC71_EVK_DisplayAdapter_V11連接到KIT_XMC71_EVK_LITE_V1。
2. 連接CAN FD屏蔽TLE9371VSJ到CYW920829M2EVK-02:
?將5V和GND引腳分別連接到評(píng)估板上的電源引腳上
?RxD連接到P5.0, TxD連接到P5.1
3. 連接CAN FD屏蔽TLE9371VSJ到KIT_XMC71_EVK_LITE_V1:
通過(guò)跳線將屏蔽的CANL和CANH引腳連接到KIT_XMC71_EVK_LITE_V1的CAN FD頭J14中的適當(dāng)引腳(引腳名稱在板的底部)
項(xiàng)目運(yùn)作
要操作該項(xiàng)目,請(qǐng)遵循以下步驟:
1. 閃碼
要使用ModusToolbox為任何一個(gè)項(xiàng)目閃爍代碼(這里為XMC71_CAN_and_Display完成,但對(duì)兩個(gè)項(xiàng)目都是一樣的),請(qǐng)遵循以下步驟
?從本文開頭處下載項(xiàng)目的.zip文件。
?將.zip文件的內(nèi)容解壓縮到計(jì)算機(jī)上的一個(gè)文件夾中。
?打開模塊工具箱的Eclipse IDE。
?在開始下的快速面板中,單擊“導(dǎo)入現(xiàn)有應(yīng)用程序”。
?選擇在步驟1中提取的文件夾。
?一旦項(xiàng)目被加載,點(diǎn)擊項(xiàng)目名稱下的“Build project”按鈕。
?將適當(dāng)?shù)碾娐钒暹B接到計(jì)算機(jī)上。
?點(diǎn)擊“啟動(dòng)”下的“運(yùn)行”按鈕,這將使代碼閃現(xiàn)到電路板上。
2. 配對(duì)設(shè)備
現(xiàn)在兩個(gè)板都閃過(guò)了,是時(shí)候?qū)⒖刂破髋c它們配對(duì)了。遵循以下步驟:
?兩個(gè)單板都上電。您應(yīng)該看到等待屏幕,顯示“waiting for controller to connect…”,并顯示連接說(shuō)明。
?如果您正在使用Xbox控制器,請(qǐng)按下Xbox按鈕(Xbox控制器圖上的數(shù)字5)來(lái)打開它,并按住配對(duì)按鈕(控制器圖上的數(shù)字6)幾秒鐘將其置于配對(duì)模式,直到Xbox按鈕開始快速閃爍。
?對(duì)于XENSIV游戲控制器,你所要做的就是打開它,它就會(huì)自動(dòng)開始廣告。
?按CYW920829M2EVK-02板上的USER BTN1按鈕
?等待幾秒鐘,等待配對(duì)過(guò)程完成。
?在Xbox控制器的情況下,CYW920829M2EVK-02上將亮起紅色LED。要完成配對(duì),請(qǐng)?jiān)俅伟醋∨鋵?duì)按鈕,直到Xbox按鈕停止閃爍并保持穩(wěn)定。
?對(duì)于XENSIV控制器,當(dāng)配對(duì)完成時(shí),控制器顯示“成功配對(duì)到…”,控制器上的綠色LED發(fā)光。
開始演示
連接建立成功后,CYW920829M2EVK-02開始發(fā)送報(bào)文。當(dāng)KIT_XMC71_EVK_LITE_V1開始接收這些數(shù)據(jù)包時(shí),顯示將更改為顯示標(biāo)題屏幕。該屏幕將顯示英飛凌徽標(biāo)和參與創(chuàng)建XMC71_EVK_DisplayAdapter_V11自定義板的合作伙伴公司的徽標(biāo)。幾秒鐘后,演示將開始。我們將首先描述控制器按鈕的Xbox名稱,并將XENSIV放在括號(hào)中。每個(gè)控制器中功能相同的按鈕在上面的控制器圖中編號(hào)相同。
使用演示
演示由兩個(gè)模塊組成:幫助屏幕模塊顯示項(xiàng)目名稱和可用用戶輸入的詳細(xì)信息;Pong模塊是經(jīng)典Pong游戲的簡(jiǎn)化版本,可以由一個(gè)或兩個(gè)玩家使用一個(gè)控制器進(jìn)行游戲。它由兩個(gè)屏幕組成。游戲屏幕顯示實(shí)際游戲,當(dāng)其中一名玩家輸了,游戲結(jié)束屏幕就會(huì)顯示出來(lái)。
為了控制游戲,你可以使用:RB (R1)(控制器圖中的2號(hào))來(lái)啟動(dòng)/重新啟動(dòng)游戲。LB (L1)(控制器圖中編號(hào)1)進(jìn)入幫助界面。左右搖桿(控制器圖中分別為4號(hào)和5號(hào)按鈕)用于控制Pong模塊中各自的搖桿。
軟件
下圖顯示了這個(gè)項(xiàng)目中軟件的一般流程。它顯示了兩個(gè)項(xiàng)目的一般簡(jiǎn)化操作及其相互作用。大寫并帶下劃線的名稱表示程序內(nèi)部有限狀態(tài)機(jī)中的狀態(tài)。
缺省情況下,控制器數(shù)據(jù)每50毫秒發(fā)送一次。這可以在文件Bluetooth_LE_Game_Controller\source\app_communication\app_communication.h中的CONTROLLER_STATUS_PERIOD_MS中進(jìn)行更改
《Pong》游戲邏輯包含兩種狀態(tài):
1. PONG_PLAY:在此狀態(tài)下,球拍位置根據(jù)用戶輸入更新,并管理碰撞。游戲也檢查游戲結(jié)束條件,設(shè)置gameOver標(biāo)志,當(dāng)槳未能擊中ba
2. PONG_OVER:在這種狀態(tài)下,玩家會(huì)看到提示游戲結(jié)束以及如何重新開始的文本。
程序的無(wú)限循環(huán)包括一個(gè)名為runAndUpdateGameState()的函數(shù),它使用開關(guān)/case結(jié)構(gòu)來(lái)管理圖1中所示的狀態(tài)。這個(gè)函數(shù)處理狀態(tài)之間的轉(zhuǎn)換,并調(diào)用適當(dāng)?shù)暮瘮?shù)在顯示器上呈現(xiàn)每個(gè)屏幕。
此外,gameModuleHandler()函數(shù)負(fù)責(zé)管理模塊之間的轉(zhuǎn)換。它注冊(cè)時(shí),RB (R1)和LB (L1)按鈕被按下,并觸發(fā)演示時(shí),他們被釋放的變化。
總結(jié)
這個(gè)項(xiàng)目結(jié)合了幾個(gè)嵌入式功能,可能會(huì)對(duì)你的下一個(gè)項(xiàng)目感興趣:
?通過(guò)藍(lán)牙LE (BLE)連接游戲控制器到您的系統(tǒng)
?橋接BLE到CAN網(wǎng)絡(luò)
?驅(qū)動(dòng)顯示器
本文編譯自hackster.io