趁著過年放假前的空閑時間,開始著手實現在“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