2012-08-04 20:10:00 +02:00
/*
2012-08-08 19:59:43 +02:00
Example sketch for the Bluetooth library - developed by Kristian Lauszus
2013-11-15 19:05:25 +01:00
For more information visit my blog : http : //blog.tkjelectronics.dk/ or
2012-08-04 20:10:00 +02:00
send me an e - mail : kristianl @ tkjelectronics . com
2012-09-09 22:13:52 +02:00
2013-02-04 07:25:28 +01:00
This example show how one can combine all the difference Bluetooth services in one single code .
Note :
2012-08-09 21:34:51 +02:00
You will need a Arduino Mega 1280 / 2560 to run this sketch ,
2013-02-04 07:25:28 +01:00
as a normal Arduino ( Uno , Duemilanove etc . ) doesn ' t have enough SRAM and FLASH
2012-08-09 21:34:51 +02:00
*/
2012-08-04 20:10:00 +02:00
2012-08-08 19:23:03 +02:00
# include <PS3BT.h>
# include <SPP.h>
2013-08-13 21:31:52 +02:00
# include <usbhub.h>
2014-08-03 00:57:37 +02:00
2015-03-03 19:08:39 +01:00
// Satisfy the IDE, which needs to see the include statment in the ino too.
# ifdef dobogusinclude
2013-12-05 03:56:06 +01:00
# include <spi4teensy3.h>
# endif
2017-08-14 09:39:38 +02:00
# include <SPI.h>
2013-08-13 21:31:52 +02:00
2012-08-04 20:10:00 +02:00
USB Usb ;
2013-11-24 15:17:19 +01:00
//USBHub Hub1(&Usb); // Some dongles have a hub inside
2012-08-08 19:23:03 +02:00
BTD Btd ( & Usb ) ; // You have to create the Bluetooth Dongle instance like so
/* You can create the instances of the bluetooth services in two ways */
2013-11-25 02:20:57 +01:00
SPP SerialBT ( & Btd ) ; // This will set the name to the defaults: "Arduino" and the pin to "0000"
2012-08-08 19:23:03 +02:00
//SPP SerialBTBT(&Btd,"Lauszus's Arduino","0000"); // You can also set the name and pin like so
2012-08-04 20:10:00 +02:00
PS3BT PS3 ( & Btd ) ; // This will just create the instance
2014-01-12 16:31:47 +01:00
//PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch
2012-08-04 20:10:00 +02:00
2015-02-19 09:14:39 +01:00
bool firstMessage = true ;
2013-05-07 00:06:49 +02:00
String output = " " ; // We will store the data in this string
2012-08-08 19:23:03 +02:00
2012-08-04 20:10:00 +02:00
void setup ( ) {
Serial . begin ( 115200 ) ; // This wil lprint the debugging from the libraries
2014-11-10 07:35:13 +01:00
# if !defined(__MIPSEL__)
2013-10-21 19:58:03 +02:00
while ( ! Serial ) ; // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
2014-11-10 07:35:13 +01:00
# endif
2012-08-04 20:10:00 +02:00
if ( Usb . Init ( ) = = - 1 ) {
2012-08-08 19:23:03 +02:00
Serial . print ( F ( " \r \n OSC did not start " ) ) ;
2013-11-15 19:05:25 +01:00
while ( 1 ) ; //halt
2012-08-04 20:10:00 +02:00
}
2012-08-08 21:28:25 +02:00
Serial . print ( F ( " \r \n Bluetooth Library Started " ) ) ;
2013-04-03 20:36:23 +02:00
output . reserve ( 200 ) ; // Reserve 200 bytes for the output string
2012-08-04 20:10:00 +02:00
}
void loop ( ) {
2013-05-07 15:50:38 +02:00
Usb . Task ( ) ; // The SPP data is actually not send until this is called, one could call SerialBT.send() directly as well
2012-08-08 19:23:03 +02:00
2013-11-15 19:05:25 +01:00
if ( SerialBT . connected ) {
if ( firstMessage ) {
2012-08-04 20:10:00 +02:00
firstMessage = false ;
SerialBT . println ( F ( " Hello from Arduino " ) ) ; // Send welcome message
}
2013-11-15 19:05:25 +01:00
if ( Serial . available ( ) )
2013-05-07 00:06:49 +02:00
SerialBT . write ( Serial . read ( ) ) ;
2013-11-15 19:05:25 +01:00
if ( SerialBT . available ( ) )
2012-08-04 20:10:00 +02:00
Serial . write ( SerialBT . read ( ) ) ;
2013-11-15 19:05:25 +01:00
}
else
2012-08-04 20:10:00 +02:00
firstMessage = true ;
2012-08-08 19:23:03 +02:00
2013-11-15 19:05:25 +01:00
if ( PS3 . PS3Connected | | PS3 . PS3NavigationConnected ) {
2012-09-19 23:20:49 +02:00
output = " " ; // Reset output string
2013-11-15 19:05:25 +01:00
if ( PS3 . getAnalogHat ( LeftHatX ) > 137 | | PS3 . getAnalogHat ( LeftHatX ) < 117 | | PS3 . getAnalogHat ( LeftHatY ) > 137 | | PS3 . getAnalogHat ( LeftHatY ) < 117 | | PS3 . getAnalogHat ( RightHatX ) > 137 | | PS3 . getAnalogHat ( RightHatX ) < 117 | | PS3 . getAnalogHat ( RightHatY ) > 137 | | PS3 . getAnalogHat ( RightHatY ) < 117 ) {
2012-09-09 22:13:52 +02:00
output + = " LeftHatX: " ;
output + = PS3 . getAnalogHat ( LeftHatX ) ;
output + = " \t LeftHatY: " ;
output + = PS3 . getAnalogHat ( LeftHatY ) ;
2013-11-24 15:15:46 +01:00
if ( PS3 . PS3Connected ) { // The Navigation controller only have one joystick
2013-01-20 22:30:53 +01:00
output + = " \t RightHatX: " ;
output + = PS3 . getAnalogHat ( RightHatX ) ;
output + = " \t RightHatY: " ;
output + = PS3 . getAnalogHat ( RightHatY ) ;
}
2012-08-04 20:10:00 +02:00
}
//Analog button values can be read from almost all buttons
2013-11-15 19:05:25 +01:00
if ( PS3 . getAnalogButton ( L2 ) | | PS3 . getAnalogButton ( R2 ) ) {
if ( output ! = " " )
2012-09-09 22:13:52 +02:00
output + = " \r \n " ;
output + = " L2: " ;
2013-01-27 22:02:33 +01:00
output + = PS3 . getAnalogButton ( L2 ) ;
2014-01-12 16:31:47 +01:00
if ( PS3 . PS3Connected ) {
2013-01-20 22:30:53 +01:00
output + = " \t R2: " ;
2013-01-27 22:02:33 +01:00
output + = PS3 . getAnalogButton ( R2 ) ;
2013-11-15 19:05:25 +01:00
}
2012-08-08 19:23:03 +02:00
}
2013-11-15 19:05:25 +01:00
if ( output ! = " " ) {
2012-09-09 22:13:52 +02:00
Serial . println ( output ) ;
2013-11-15 19:05:25 +01:00
if ( SerialBT . connected )
2012-09-09 22:13:52 +02:00
SerialBT . println ( output ) ;
2012-09-19 23:20:49 +02:00
output = " " ; // Reset output string
2012-08-04 20:10:00 +02:00
}
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( PS ) ) {
2012-09-09 22:13:52 +02:00
output + = " - PS " ;
PS3 . disconnect ( ) ;
2013-11-15 19:05:25 +01:00
}
2012-09-09 22:13:52 +02:00
else {
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( TRIANGLE ) )
2012-09-09 22:13:52 +02:00
output + = " - Traingle " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( CIRCLE ) )
2012-09-09 22:13:52 +02:00
output + = " - Circle " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( CROSS ) )
2012-09-09 22:13:52 +02:00
output + = " - Cross " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( SQUARE ) )
2012-09-09 22:13:52 +02:00
output + = " - Square " ;
2012-08-04 20:10:00 +02:00
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( UP ) ) {
2012-09-09 22:13:52 +02:00
output + = " - Up " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . PS3Connected ) {
2013-11-15 23:19:10 +01:00
PS3 . setLedOff ( ) ;
2012-09-09 22:13:52 +02:00
PS3 . setLedOn ( LED4 ) ;
}
2013-11-15 19:05:25 +01:00
}
if ( PS3 . getButtonClick ( RIGHT ) ) {
2012-09-09 22:13:52 +02:00
output + = " - Right " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . PS3Connected ) {
2013-11-15 23:19:10 +01:00
PS3 . setLedOff ( ) ;
2013-11-15 19:05:25 +01:00
PS3 . setLedOn ( LED1 ) ;
}
}
if ( PS3 . getButtonClick ( DOWN ) ) {
output + = " - Down " ;
if ( PS3 . PS3Connected ) {
2013-11-15 23:19:10 +01:00
PS3 . setLedOff ( ) ;
2013-11-15 19:05:25 +01:00
PS3 . setLedOn ( LED2 ) ;
2012-09-09 22:13:52 +02:00
}
2013-11-15 19:05:25 +01:00
}
if ( PS3 . getButtonClick ( LEFT ) ) {
output + = " - Left " ;
if ( PS3 . PS3Connected ) {
2013-11-15 23:19:10 +01:00
PS3 . setLedOff ( ) ;
2013-11-15 19:05:25 +01:00
PS3 . setLedOn ( LED3 ) ;
}
}
2012-08-04 20:10:00 +02:00
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( L1 ) )
2012-09-09 22:13:52 +02:00
output + = " - L1 " ;
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( L3 ) )
output + = " - L3 " ;
if ( PS3 . getButtonClick ( R1 ) )
output + = " - R1 " ;
if ( PS3 . getButtonClick ( R3 ) )
output + = " - R3 " ;
2012-08-04 20:10:00 +02:00
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( SELECT ) ) {
2014-01-04 14:14:22 +01:00
output + = " - Select " ;
2013-04-03 20:36:23 +02:00
}
2013-11-15 19:05:25 +01:00
if ( PS3 . getButtonClick ( START ) )
output + = " - Start " ;
2012-08-04 20:10:00 +02:00
2013-11-15 19:05:25 +01:00
if ( output ! = " " ) {
2012-09-09 22:13:52 +02:00
String string = " PS3 Controller " + output ;
Serial . println ( string ) ;
2013-11-15 19:05:25 +01:00
if ( SerialBT . connected )
2012-09-09 22:13:52 +02:00
SerialBT . println ( string ) ;
}
2013-04-03 20:36:23 +02:00
}
delay ( 10 ) ;
2012-08-04 20:10:00 +02:00
}
}