Connecting PS3 to Arduino – Video and Code
See here how this works.
The Code is below
1. PS3 Remote Control
Ebay: PS Remote on Ebay
Amazon: PS Remote on Amazon
2. Arduino Uno
Ebay: Arduino Uno Link
Amazon: Arduino Uno Link on Amazon
3. H Bridge Chip
Ebay: H Bridge Chip Link
Amazon: H Bridge Chip Link Amazon
4. Car chassis
Ebay: Car Chassis Link
Amazon: Car Chassis Link Amazon
5. Eneloop batteries
Ebay: AA Batteries BEST!
Amazon: AA Batteries BEST! on Amazon
6. Batteries holder
Ebay: Batteries Holder
Amazon: Batteries Holder
7. USB Shield
Ebay: USB shield on Ebay
Amazon: USB shield on Amazon
8. USB Dongle
ebay: USB dongle Ebay
Amazon: USB dongle Amazon
Code is here:
/* * By Roee Bloch 1-Oct-2018 * Based on BT library below * Example sketch for the Bluetooth library - developed by Kristian Lauszus For more information visit my blog: http://blog.tkjelectronics.dk/ or send me an e-mail: kristianl@tkjelectronics.com This example show how one can combine all the difference Bluetooth services in one single code. Note: You will need a Arduino Mega 1280/2560 to run this sketch, as a normal Arduino (Uno, Duemilanove etc.) doesn't have enough SRAM and FLASH */ #include <PS3BT.h> #include <SPP.h> #include <usbhub.h> // Satisfy the IDE, which needs to see the include statment in the ino too. #ifdef dobogusinclude #include <spi4teensy3.h> #endif #include <SPI.h> #define my_print 0 USB Usb; //USBHub Hub1(&Usb); // Some dongles have a hub inside 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 */ SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the pin to "0000" //SPP SerialBTBT(&Btd,"Lauszus's Arduino","0000"); // You can also set the name and pin like so PS3BT PS3(&Btd); // This will just create the instance //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 bool firstMessage = true; String output = ""; // We will store the data in this string int my_right,my_left; void setup() { Serial.begin(115200); // This wil lprint the debugging from the libraries pinMode(2, OUTPUT); // control wheels2 H-bridge 2 pinMode(3, INPUT); // control wheels2 H-bridge 2 pinMode(8, OUTPUT); // just for test during debug mode pinMode(4, OUTPUT); // control wheels1 H-bridge 1 pinMode(5, OUTPUT); // control wheels1 H-bridge 1 pinMode(6, OUTPUT); // control wheels2 H-bridge 2 pinMode(7, OUTPUT); // control wheels2 H-bridge 2 #if !defined(__MIPSEL__) while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #endif if (Usb.Init() == -1) { Serial.print(F("\r\nOSC did not start")); while (1); //halt } if (my_print) { Serial.print(F("\r\nBluetooth Library Started")); } output.reserve(200); // Reserve 200 bytes for the output string } void loop() { Usb.Task(); // The SPP data is actually not send until this is called, one could call SerialBT.send() directly as well if (SerialBT.connected) { if (firstMessage) { firstMessage = false; if (my_print) { SerialBT.println(F("Hello from Arduino")); // Send welcome message } } if (Serial.available()) SerialBT.write(Serial.read()); if (SerialBT.available()) if (my_print) { Serial.write(SerialBT.read()); } } else firstMessage = true; if (PS3.PS3Connected || PS3.PS3NavigationConnected) { output = ""; // Reset output string 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) { output += "LeftHatX: "; output += PS3.getAnalogHat(LeftHatX); output += "\tLeftHatY: "; output += PS3.getAnalogHat(LeftHatY); if (PS3.PS3Connected) { // The Navigation controller only have one joystick output += "\tRightHatX: "; output += PS3.getAnalogHat(RightHatX); my_right=PS3.getAnalogHat(RightHatX); output += "\tRightHatY: "; output += PS3.getAnalogHat(RightHatY); my_left=PS3.getAnalogHat(RightHatY); switch (my_right) { case 255:right(); break; case 0: left (); break; // default: // mystop(); } switch (my_left) { case 0:forward(); break; case 255: backword(); break; // default: // mystop(); } if ((my_right !=0) && (my_right !=255) && (my_left !=0) && (my_left !=255)) mystop(); // Serial.println("roee ....."); // Serial.println(my_right); // Serial.println(my_left); } } //Analog button values can be read from almost all buttons if (PS3.getAnalogButton(L2) || PS3.getAnalogButton(R2)) { if (output != "") output += "\r\n"; output += "L2: "; output += PS3.getAnalogButton(L2); if (PS3.PS3Connected) { output += "\tR2: "; output += PS3.getAnalogButton(R2); } } if (output != "") { if (my_print) { Serial.println(output); } if (SerialBT.connected) SerialBT.println(output); output = ""; // Reset output string } if (PS3.getButtonClick(PS)) { output += " - PS"; PS3.disconnect(); } else { if (PS3.getButtonClick(TRIANGLE)) output += " - Traingle"; if (PS3.getButtonClick(CIRCLE)) output += " - Circle"; if (PS3.getButtonClick(CROSS)) output += " - Cross"; if (PS3.getButtonClick(SQUARE)) output += " - Square"; if (PS3.getButtonClick(UP)) { forward(); output += " - Up"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED4); } } if (PS3.getButtonClick(RIGHT)) { right(); output += " - Right"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED1); } } if (PS3.getButtonClick(DOWN)) { backword(); output += " - Down"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED2); } } if (PS3.getButtonClick(LEFT)) { output += " - Left"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED3); } } if (PS3.getButtonClick(L1)) output += " - L1"; if (PS3.getButtonClick(L3)) output += " - L3"; if (PS3.getButtonClick(R1)) output += " - R1"; if (PS3.getButtonClick(R3)) output += " - R3"; if (PS3.getButtonClick(SELECT)) { mystop(); output += " - Select"; } if (PS3.getButtonClick(START)) output += " - Start"; if (output != "") { String string = "PS3 Controller" + output; if (my_print) { Serial.println(string); } if (SerialBT.connected) SerialBT.println(string); } } delay(10); } } void mystop() { digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); } void forward() { digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); } void backword() { digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, HIGH); digitalWrite(7, LOW); } void right() { digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); } void left() { digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); }/* <pre class="lang:default decode:true">/* * By Roee Bloch 1-Oct-2018 * Based on BT library below * Example sketch for the Bluetooth library - developed by Kristian Lauszus For more information visit my blog: http://blog.tkjelectronics.dk/ or send me an e-mail: kristianl@tkjelectronics.com This example show how one can combine all the difference Bluetooth services in one single code. Note: You will need a Arduino Mega 1280/2560 to run this sketch, as a normal Arduino (Uno, Duemilanove etc.) doesn't have enough SRAM and FLASH */ #include <PS3BT.h> #include <SPP.h> #include <usbhub.h> // Satisfy the IDE, which needs to see the include statment in the ino too. #ifdef dobogusinclude #include <spi4teensy3.h> #endif #include <SPI.h> #define my_print 0 USB Usb; //USBHub Hub1(&Usb); // Some dongles have a hub inside 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 */ SPP SerialBT(&Btd); // This will set the name to the defaults: "Arduino" and the pin to "0000" //SPP SerialBTBT(&Btd,"Lauszus's Arduino","0000"); // You can also set the name and pin like so PS3BT PS3(&Btd); // This will just create the instance //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 bool firstMessage = true; String output = ""; // We will store the data in this string int my_right,my_left; void setup() { Serial.begin(115200); // This wil lprint the debugging from the libraries pinMode(2, OUTPUT); // control wheels2 H-bridge 2 pinMode(3, INPUT); // control wheels2 H-bridge 2 pinMode(8, OUTPUT); // just for test during debug mode pinMode(4, OUTPUT); // control wheels1 H-bridge 1 pinMode(5, OUTPUT); // control wheels1 H-bridge 1 pinMode(6, OUTPUT); // control wheels2 H-bridge 2 pinMode(7, OUTPUT); // control wheels2 H-bridge 2 #if !defined(__MIPSEL__) while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection #endif if (Usb.Init() == -1) { Serial.print(F("\r\nOSC did not start")); while (1); //halt } if (my_print) { Serial.print(F("\r\nBluetooth Library Started")); } output.reserve(200); // Reserve 200 bytes for the output string } void loop() { Usb.Task(); // The SPP data is actually not send until this is called, one could call SerialBT.send() directly as well if (SerialBT.connected) { if (firstMessage) { firstMessage = false; if (my_print) { SerialBT.println(F("Hello from Arduino")); // Send welcome message } } if (Serial.available()) SerialBT.write(Serial.read()); if (SerialBT.available()) if (my_print) { Serial.write(SerialBT.read()); } } else firstMessage = true; if (PS3.PS3Connected || PS3.PS3NavigationConnected) { output = ""; // Reset output string 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) { output += "LeftHatX: "; output += PS3.getAnalogHat(LeftHatX); output += "\tLeftHatY: "; output += PS3.getAnalogHat(LeftHatY); if (PS3.PS3Connected) { // The Navigation controller only have one joystick output += "\tRightHatX: "; output += PS3.getAnalogHat(RightHatX); my_right=PS3.getAnalogHat(RightHatX); output += "\tRightHatY: "; output += PS3.getAnalogHat(RightHatY); my_left=PS3.getAnalogHat(RightHatY); switch (my_right) { case 255:right(); break; case 0: left (); break; // default: // mystop(); } switch (my_left) { case 0:forward(); break; case 255: backword(); break; // default: // mystop(); } if ((my_right !=0) && (my_right !=255) && (my_left !=0) && (my_left !=255)) mystop(); // Serial.println("roee ....."); // Serial.println(my_right); // Serial.println(my_left); } } //Analog button values can be read from almost all buttons if (PS3.getAnalogButton(L2) || PS3.getAnalogButton(R2)) { if (output != "") output += "\r\n"; output += "L2: "; output += PS3.getAnalogButton(L2); if (PS3.PS3Connected) { output += "\tR2: "; output += PS3.getAnalogButton(R2); } } if (output != "") { if (my_print) { Serial.println(output); } if (SerialBT.connected) SerialBT.println(output); output = ""; // Reset output string } if (PS3.getButtonClick(PS)) { output += " - PS"; PS3.disconnect(); } else { if (PS3.getButtonClick(TRIANGLE)) output += " - Traingle"; if (PS3.getButtonClick(CIRCLE)) output += " - Circle"; if (PS3.getButtonClick(CROSS)) output += " - Cross"; if (PS3.getButtonClick(SQUARE)) output += " - Square"; if (PS3.getButtonClick(UP)) { forward(); output += " - Up"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED4); } } if (PS3.getButtonClick(RIGHT)) { right(); output += " - Right"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED1); } } if (PS3.getButtonClick(DOWN)) { backword(); output += " - Down"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED2); } } if (PS3.getButtonClick(LEFT)) { output += " - Left"; if (PS3.PS3Connected) { PS3.setLedOff(); PS3.setLedOn(LED3); } } if (PS3.getButtonClick(L1)) output += " - L1"; if (PS3.getButtonClick(L3)) output += " - L3"; if (PS3.getButtonClick(R1)) output += " - R1"; if (PS3.getButtonClick(R3)) output += " - R3"; if (PS3.getButtonClick(SELECT)) { mystop(); output += " - Select"; } if (PS3.getButtonClick(START)) output += " - Start"; if (output != "") { String string = "PS3 Controller" + output; if (my_print) { Serial.println(string); } if (SerialBT.connected) SerialBT.println(string); } } delay(10); } } void mystop() { digitalWrite(4, LOW); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, LOW); } void forward() { digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, LOW); digitalWrite(7, HIGH); } void backword() { digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, HIGH); digitalWrite(7, LOW); } void right() { digitalWrite(4, HIGH); digitalWrite(5, LOW); digitalWrite(6, LOW); digitalWrite(7, HIGH); } void left() { digitalWrite(4, LOW); digitalWrite(5, HIGH); digitalWrite(6, HIGH); digitalWrite(7, LOW); }