趁著過(guò)年放假前的空閑時(shí)間,開(kāi)始著手實(shí)現(xiàn)在“Arduino實(shí)踐——遙控4WD小車”一文中提到過(guò)使用PS3手柄作為遙控器的方案,因?yàn)檫^(guò)年沒(méi)有帶筆記本回家,現(xiàn)在來(lái)補(bǔ)一下。
首先要介紹一下USB Host Shield[1]。它是Oleg從2009年春開(kāi)始設(shè)計(jì)的Arduino Shield,采用MAX3421E控制芯片,目前最新版本為2.0,旨在讓Arduino能夠與USB設(shè)備(如,鍵盤(pán)、鼠標(biāo)、游戲手柄、相機(jī)、GPS、手機(jī))進(jìn)行通訊,當(dāng)然也能完成ADK的功能。在軟件方面,Oleg也在github上開(kāi)放了驅(qū)動(dòng)代碼和例子程序[2],此后又有人基于前者的代碼給出了更為方便簡(jiǎn)潔的USB藍(lán)牙適配器與PS3手柄通訊的示例代碼[3,4]。

PS3手柄只能與具有相同藍(lán)牙地址的主機(jī)配對(duì),所以需要先將USB藍(lán)牙適配器的地址寫(xiě)入PS3手柄。可以使用[3]中的PS3Pair代碼,將BDADDR值修改為藍(lán)牙適配器的地址。[4]中提供的PS3BT例子,將藍(lán)牙地址修改和通訊功能整合到了一起,省了一次sketch的upload,注意也需要將代碼中的my_bdaddr修改為適配器的地址。配對(duì)時(shí)需要將PS3手柄連接線與USB Host Shield相連,待完成后將藍(lán)牙適配器接上,打開(kāi)手柄,可從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