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