<ahref="_r_e_a_d_m_e_8md.html">Go to the documentation of this file.</a><divclass="fragment"><divclass="line"><aname="l00001"></a><spanclass="lineno"> 1</span> <spanclass="preprocessor"># USB Host Library Rev.2.0</span></div>
<divclass="line"><aname="l00009"></a><spanclass="lineno"> 9</span> <spanclass="stringliteral">Project main web site is: <http://www.circuitsathome.com>.</span></div>
<divclass="line"><aname="l00011"></a><spanclass="lineno"> 11</span> <spanclass="stringliteral">Some information can also be found at: <http://blog.tkjelectronics.dk/>.</span></div>
<divclass="line"><aname="l00013"></a><spanclass="lineno"> 13</span> <spanclass="stringliteral">The shield can be purchased at the main site: <http://www.circuitsathome.com/products-page/arduino-shields> or from [TKJ Electronics](http://tkjelectronics.com/): <http://shop.tkjelectronics.dk/product_info.php?products_id=43>.</span></div>
<divclass="line"><aname="l00017"></a><spanclass="lineno"> 17</span> <spanclass="stringliteral">For more information about the hardware see the [Hardware Manual](http://www.circuitsathome.com/usb-host-shield-hardware-manual).</span></div>
<divclass="line"><aname="l00022"></a><spanclass="lineno"> 22</span> <spanclass="stringliteral"> * Developer of the USB Core, HID, FTDI, ADK, ACM, and PL2303 libraries</span></div>
<divclass="line"><aname="l00024"></a><spanclass="lineno"> 24</span> <spanclass="stringliteral"> * Developer of the BTD, SPP, PS3, Wii, and Xbox libraries</span></div>
<divclass="line"><aname="l00029"></a><spanclass="lineno"> 29</span> <spanclass="stringliteral">To use this library with the official [Arduino ADK](http://arduino.cc/en/Main/ArduinoBoardADK) uncomment the following line in [avrpins.h](https://github.com/felis/USB_Host_Shield_2.0/blob/master/avrpins.h):</span></div>
<divclass="line"><aname="l00037"></a><spanclass="lineno"> 37</span> <spanclass="stringliteral">The [BTD library](https://github.com/felis/USB_Host_Shield_2.0/blob/master/BTD.cpp) is a general purpose library for an ordinary Bluetooth dongle.</span></div>
<divclass="line"><aname="l00038"></a><spanclass="lineno"> 38</span> <spanclass="stringliteral">This library make it easy to add support for different Bluetooth services like a PS3 or a Wii controller or SPP which is a virtual serial port via Bluetooth.</span></div>
<divclass="line"><aname="l00039"></a><spanclass="lineno"> 39</span> <spanclass="stringliteral">Some different examples can be found in the [example directory](https://github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Bluetooth).</span></div>
<divclass="line"><aname="l00041"></a><spanclass="lineno"> 41</span> <spanclass="stringliteral">The BTD library will also make it possible to use multiple services at once, the following example sketch is an example of this:</span></div>
<divclass="line"><aname="l00046"></a><spanclass="lineno"> 46</span> <spanclass="stringliteral">SPP stands for "Serial Port Profile" and is a Bluetooth protocol that implements a virtual comport which allows you to send data back and forth from your computer/phone to your Arduino via Bluetooth.</span></div>
<divclass="line"><aname="l00047"></a><spanclass="lineno"> 47</span> <spanclass="stringliteral">It has been tested successfully on Windows, Mac OS X, Linux, and Android.</span></div>
<divclass="line"><aname="l00048"></a><spanclass="lineno"> 48</span> <spanclass="stringliteral">Unfortunately Google broke something in Android 4.2, so it'</span>s currently not working in <spanclass="keyword">this</span> version of Android.</div>
<divclass="line"><aname="l00055"></a><spanclass="lineno"> 55</span> To implement the <aclass="code"href="class_s_p_p.html">SPP</a> protocol I used a <aclass="code"href="_p_s3_enums_8h.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba730728c9aac83393ac83f96a8125b8bb">Bluetooth</a> sniffing tool called [PacketLogger](http:<spanclass="comment">//www.tkjelectronics.com/uploads/PacketLogger.zip) developed by Apple. </span></div>
<divclass="line"><aname="l00056"></a><spanclass="lineno"> 56</span> It enables me to see the <aclass="code"href="_p_s3_enums_8h.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba730728c9aac83393ac83f96a8125b8bb">Bluetooth</a> communication between my Mac and any device.</div>
<divclass="line"><aname="l00060"></a><spanclass="lineno"> 60</span> These libraries consist of the [<aclass="code"href="class_p_s3_b_t.html">PS3BT</a>](https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/blob/master/PS3BT.cpp) and [PS3USB](https://github.com/felis/USB_Host_Shield_2.0/blob/master/PS3USB.cpp). These libraries allows you to use a Dualshock 3, Navigation or a Motion controller with the USB Host Shield both via Bluetooth and USB.</span></div>
<divclass="line"><aname="l00062"></a><spanclass="lineno"> 62</span> In order to use your Playstation controller via <aclass="code"href="_p_s3_enums_8h.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba730728c9aac83393ac83f96a8125b8bb">Bluetooth</a> you have to <spanclass="keyword">set</span> the <aclass="code"href="_p_s3_enums_8h.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba730728c9aac83393ac83f96a8125b8bb">Bluetooth</a> address of the dongle internally to your PS3 Controller. This can be achieved by plugging the controller in via <aclass="code"href="class_u_s_b.html">USB</a> and letting the library <spanclass="keyword">set</span> it automatically.</div>
<divclass="line"><aname="l00064"></a><spanclass="lineno"> 64</span> __Note:__ To obtain the address you have to plug in the <aclass="code"href="_p_s3_enums_8h.html#a67a0db04d321a74b7e7fcfd3f1a3f70ba730728c9aac83393ac83f96a8125b8bb">Bluetooth</a> dongle before connecting the controller, or alternatively you could <spanclass="keyword">set</span> it in code like so: <https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/PS3BT/PS3BT.ino#L12>.</span></div>
<divclass="line"><aname="l00066"></a><spanclass="lineno"> 66</span> For more information about the PS3 protocol see the official wiki: <https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/wiki/PS3-Information>.</span></div>
<divclass="line"><aname="l00074"></a><spanclass="lineno"> 74</span> <aclass="code"href="controller_enums_8h.html#a03bfec859eac87be20f8952c1eb89de0a42a4ade1acd55a49164099104990e09f">A</a> special thanks go to the following people:</div>
<divclass="line"><aname="l00076"></a><spanclass="lineno"> 76</span> 1. _Richard Ibbotson_ who made <spanclass="keyword">this</span> excellent guide: <http:<spanclass="comment">//www.circuitsathome.com/mcu/ps3-and-wiimote-game-controllers-on-the-arduino-host-shield-part></span></div>
<divclass="line"><aname="l00077"></a><spanclass="lineno"> 77</span> 2. _Tomoyuki Tanaka_ <spanclass="keywordflow">for</span> releasing his code <spanclass="keywordflow">for</span> the Arduino <aclass="code"href="class_u_s_b.html">USB</a> Host shield connected to the wiimote: <http:<spanclass="comment">//www.circuitsathome.com/mcu/rc-car-controlled-by-wii-remote-on-arduino></span></div>
<divclass="line"><aname="l00079"></a><spanclass="lineno"> 79</span> Also a big thanks all the people behind these sites about the Motion controller:</div>
<divclass="line"><aname="l00088"></a><spanclass="lineno"> 88</span> The library support one Xbox 360 via <aclass="code"href="class_u_s_b.html">USB</a> or up to four Xbox 360 controllers wirelessly by <spanclass="keyword">using</span> a [Xbox 360 wireless receiver](http:<spanclass="comment">//blog.tkjelectronics.dk/wp-content/uploads/xbox360-wireless-receiver.jpg).</span></div>
<divclass="line"><aname="l00090"></a><spanclass="lineno"> 90</span> To use it via <aclass="code"href="class_u_s_b.html">USB</a> use the [<aclass="code"href="class_x_b_o_x_u_s_b.html">XBOXUSB</a>](https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/blob/master/XBOXUSB.cpp) library or to use it wirelessly use the [XBOXRECV](https://github.com/felis/USB_Host_Shield_2.0/blob/master/XBOXRECV.cpp) library.</span></div>
<divclass="line"><aname="l00092"></a><spanclass="lineno"> 92</span> __Note that a Wireless controller can NOT be used via <aclass="code"href="class_u_s_b.html">USB</a>!__</div>
<divclass="line"><aname="l00094"></a><spanclass="lineno"> 94</span> Examples code can be found in the [examples directory](https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/tree/master/examples/Xbox).</span></div>
<divclass="line"><aname="l00102"></a><spanclass="lineno"> 102</span> All the information regarding the Xbox 360 controller protocol are form these sites:</div>
<divclass="line"><aname="l00110"></a><spanclass="lineno"> 110</span> The [Wii](https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/blob/master/Wii.cpp) library support the Wiimote, but also the Nunchuch and Motion Plus extensions via Bluetooth. The Wii U Pro Controller is also supported via Bluetooth.</span></div>
<divclass="line"><aname="l00112"></a><spanclass="lineno"> 112</span> First you have to pair with the controller, <spanclass="keyword">this</span> is done automatically by the library <spanclass="keywordflow">if</span> you create the instance like so:</div>
<divclass="line"><aname="l00118"></a><spanclass="lineno"> 118</span> And then press 1 & 2 at once on the Wiimote or press sync <spanclass="keywordflow">if</span> you are <spanclass="keyword">using</span> a Wii U Pro Controller.</div>
<divclass="line"><aname="l00126"></a><spanclass="lineno"> 126</span> Then just press any button any button on the Wiimote and it will connect to the dongle.</div>
<divclass="line"><aname="l00128"></a><spanclass="lineno"> 128</span> Take a look at the example <spanclass="keywordflow">for</span> more information: <https:<spanclass="comment">//github.com/felis/USB_Host_Shield_2.0/blob/master/examples/Bluetooth/Wii/Wii.ino>.</span></div>
<divclass="line"><aname="l00140"></a><spanclass="lineno"> 140</span> * The old library created by _Tomoyuki Tanaka_: <https:<spanclass="comment">//github.com/moyuchin/WiiRemote_on_Arduino> also helped a lot.</span></div>
<divclass="line"><aname="l00144"></a><spanclass="lineno"> 144</span> > When I plug my device into the <aclass="code"href="class_u_s_b.html">USB</a> connector nothing happens?</div>
<divclass="line"><aname="l00146"></a><spanclass="lineno"> 146</span> Try to connect a external power supply to the Arduino - <spanclass="keyword">this</span> solves the problem in most cases.</div>