趁着过年放假前的空闲时间,开始着手实现在“Arduino实践——遥控4WD小车”一文中提到过使用PS3手柄作为遥控器的方案,因为过年没有带笔记本回家,现在来补一下。
首先要介绍一下USB Host Shield[1]。它是Oleg从2009年春开始设计的Arduino Shield,采用MAX3421E控制芯片,目前最新版本为2.0,旨在让Arduino能够与USB设备(如,键盘、鼠标、游戏手柄、相机、GPS、手机)进行通讯,当然也能完成ADK的功能。在软件方面,Oleg也在github上开放了驱动代码和例子程序[2],此后又有人基于前者的代码给出了更为方便简洁的USB蓝牙适配器与PS3手柄通讯的示例代码[3,4]。
PS3手柄只能与具有相同蓝牙地址的主机配对,所以需要先将USB蓝牙适配器的地址写入PS3手柄。可以使用[3]中的PS3Pair代码,将BDADDR值修改为蓝牙适配器的地址。[4]中提供的PS3BT例子,将蓝牙地址修改和通讯功能整合到了一起,省了一次sketch的upload,注意也需要将代码中的my_bdaddr修改为适配器的地址。配对时需要将PS3手柄连接线与USB Host Shield相连,待完成后将蓝牙适配器接上,打开手柄,可从Serial Monitor看到日志(注意波特率的一致)。
USB Host Shield占用了SPI、P9、P10,注意不要冲突了。
Reference:
[1] http://www.circuitsathome.com/arduino_usb_host_shield_projects
[2] https://github.com/felis/USB_Host_Shield_2.0
[3] https://github.com/Lauszus/PS3-Controller-BT-Library-for-Arduino
[4] https://github.com/TKJElectronics/USB_Host_Shield_2.0