构建一个游戏控制器,通过BLE连接到CYW20829,桥接到CAN FD,在连接显示器的XMC71上玩乒乓风格的游戏
扫描二维码
随时随地手机看文章
该项目涉及两块电路板:CYW920829M2EVK-02,它通过蓝牙低功耗(BLE)连接到游戏控制器,以及KIT_XMC71_EVK_LITE_V1。
它支持第三代或更高版本的Xbox控制器或英飞凌的XENSIV游戏控制器,通过带有CAN FD Shield TLE9371VSJ的CAN FD总线将数据传输到KIT_XMC71_EVK_LITE_V1板。后者处理数据并使用自定义图形适配器XMC71_EVK_DisplayAdapter_V11在屏幕上显示受Pong启发的演示游戏。
硬件
在运行代码之前,请确保所有硬件组件都已正确连接和配置。按照以下步骤设置硬件:
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。
•在开始下的快速面板中,单击“导入现有应用程序”。
•选择在步骤1中提取的文件夹。
•一旦项目被加载,点击项目名称下的“Build project”按钮。
•将适当的电路板连接到计算机上。
•点击“启动”下的“运行”按钮,这将使代码闪现到电路板上。
2. 配对设备
现在两个板都闪过了,是时候将控制器与它们配对了。遵循以下步骤:
•两个单板都上电。您应该看到等待屏幕,显示“waiting for controller to connect…”,并显示连接说明。
•如果您正在使用Xbox控制器,请按下Xbox按钮(Xbox控制器图上的数字5)来打开它,并按住配对按钮(控制器图上的数字6)几秒钟将其置于配对模式,直到Xbox按钮开始快速闪烁。
•对于XENSIV游戏控制器,你所要做的就是打开它,它就会自动开始广告。
•按CYW920829M2EVK-02板上的USER BTN1按钮
•等待几秒钟,等待配对过程完成。
•在Xbox控制器的情况下,CYW920829M2EVK-02上将亮起红色LED。要完成配对,请再次按住配对按钮,直到Xbox按钮停止闪烁并保持稳定。
•对于XENSIV控制器,当配对完成时,控制器显示“成功配对到…”,控制器上的绿色LED发光。
开始演示
连接建立成功后,CYW920829M2EVK-02开始发送报文。当KIT_XMC71_EVK_LITE_V1开始接收这些数据包时,显示将更改为显示标题屏幕。该屏幕将显示英飞凌徽标和参与创建XMC71_EVK_DisplayAdapter_V11自定义板的合作伙伴公司的徽标。几秒钟后,演示将开始。我们将首先描述控制器按钮的Xbox名称,并将XENSIV放在括号中。每个控制器中功能相同的按钮在上面的控制器图中编号相同。
使用演示
演示由两个模块组成:帮助屏幕模块显示项目名称和可用用户输入的详细信息;Pong模块是经典Pong游戏的简化版本,可以由一个或两个玩家使用一个控制器进行游戏。它由两个屏幕组成。游戏屏幕显示实际游戏,当其中一名玩家输了,游戏结束屏幕就会显示出来。
为了控制游戏,你可以使用:RB (R1)(控制器图中的2号)来启动/重新启动游戏。LB (L1)(控制器图中编号1)进入帮助界面。左右摇杆(控制器图中分别为4号和5号按钮)用于控制Pong模块中各自的摇杆。
软件
下图显示了这个项目中软件的一般流程。它显示了两个项目的一般简化操作及其相互作用。大写并带下划线的名称表示程序内部有限状态机中的状态。
缺省情况下,控制器数据每50毫秒发送一次。这可以在文件Bluetooth_LE_Game_Controller\source\app_communication\app_communication.h中的CONTROLLER_STATUS_PERIOD_MS中进行更改
《Pong》游戏逻辑包含两种状态:
1. PONG_PLAY:在此状态下,球拍位置根据用户输入更新,并管理碰撞。游戏也检查游戏结束条件,设置gameOver标志,当桨未能击中ba
2. PONG_OVER:在这种状态下,玩家会看到提示游戏结束以及如何重新开始的文本。
程序的无限循环包括一个名为runAndUpdateGameState()的函数,它使用开关/case结构来管理图1中所示的状态。这个函数处理状态之间的转换,并调用适当的函数在显示器上呈现每个屏幕。
此外,gameModuleHandler()函数负责管理模块之间的转换。它注册时,RB (R1)和LB (L1)按钮被按下,并触发演示时,他们被释放的变化。
总结
这个项目结合了几个嵌入式功能,可能会对你的下一个项目感兴趣:
•通过蓝牙LE (BLE)连接游戏控制器到您的系统
•桥接BLE到CAN网络
•驱动显示器
本文编译自hackster.io