Go Down

Topic: PS2 controller wireless (Read 2528 times) previous topic - next topic

Erik-dk

Hello out there, i have a project where i need to make a robot work whit the PS2 controller i have tried doing it whit the nrf24l01 but that did not work at all  =( so after some head scratching I came op whit the idea that i just could make a wireless PS2 controller but then i watched the interweb and did not find any tutorials so do any of you know how I could make it wireless?? :)

HazardsMind

I made my robot work from a wireless PS2 control. It's actually very simple. I'll try to post some pictures and maybe a video.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

HazardsMind

#2
Jan 06, 2013, 12:57 am Last Edit: Jan 06, 2013, 01:09 am by HazardsMind Reason: 1
Here is the connector and wiring configuration. Sorry they are so big.
I used the PS2X Library here http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
Follow it step by step. If you want, I will send you my .h and .cpp files along with an example program. But go to that site and try it. Make sure you put the files in the correct place, otherwise you will get errors.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Erik-dk


Here is the connector and wiring configuration. Sorry they are so big.
I used the PS2X Library here http://www.billporter.info/2010/06/05/playstation-2-controller-arduino-library-v1-0/
Follow it step by step. If you want, I will send you my .h and .cpp files along with an example program. But go to that site and try it. Make sure you put the files in the correct place, otherwise you will get errors.
looks cool but do you know the range of it and can i increase it?? I have already made made most of my code and i am pretty sure on it will work the only thing where i have a problem is when I try to use PWM whit my four motors. Have you tried it??

HazardsMind

Are you using a UNO or Mega? I've done it with 2 PWM motors and 1 regular on/off motor. The range is however far the controller can go, that's it.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Erik-dk


Are you using a UNO or Mega? I've done it with 2 PWM motors and 1 regular on/off motor. The range is however far the controller can go, that's it.
I am using the UNO and my four motors are connected so the arduino only thinks there is two but if you don't have problem whit sending me the code and the schematics then I would like to have it. ;)

HazardsMind

The schematics you can find online, in fact that site shows you how to wire it . As for the code, I can give you a sample, that works for the ps2x library that I have. It will only work if you and I have the same library, otherwise your going to have errors.

My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Erik-dk


The schematics you can find online, in fact that site shows you how to wire it . As for the code, I can give you a sample, that works for the ps2x library that I have. It will only work if you and I have the same library, otherwise your going to have errors.



i have the PS2X library from bill porter ;)

HazardsMind

Ok, we'll I'm not home right now, but I send it to you later.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Erik-dk


Ok, we'll I'm not home right now, but I send it to you later.
alright thanks ;)

HazardsMind

#10
Jan 06, 2013, 09:09 pm Last Edit: Jan 06, 2013, 09:17 pm by HazardsMind Reason: 1
Here is my sample.
Code: [Select]
#include <PS2X_lib.h>  //for v1.6

PS2X ps2x; // create PS2 Controller Class
//CONTROLLER VOLTAGE MUST BE SET TO 3.3V, NOT 5V

//right now, the library does NOT support hot pluggable controllers, meaning
//you must always either restart your Arduino after you conect the controller,
//or call config_gamepad(pins) again after connecting the controller.
int error = 0;
byte type = 0;
int temp = 0;
byte vibrate = 0;

byte led1 = 8;
byte Mopen = 6;
byte Mclosed = 5;

void setup(){
 Serial.begin(57600);

 //CHANGES for v1.6 HERE!!! **************PAY ATTENTION*************
 pinMode(Mopen, OUTPUT);                                // Establishes LEDPin as an output so the LED can be seen
 pinMode(Mclosed, OUTPUT);
 pinMode(led1, OUTPUT);
 error = ps2x.config_gamepad(13,11,10,12, true, true);   //setup pins and settings:  GamePad(clock, command, attention, data, Pressures?, Rumble?) check for error

 if(error == 0){
   Serial.println("Found Controller, configured successful");
   Serial.println("Try out all the buttons, X will vibrate the controller, faster as you press harder;");
   Serial.println("holding L1 or R1 will print out the analog stick values.");
   Serial.println("Go to www.billporter.info for updates and to report bugs.");
 }

 else if(error == 1)
   Serial.println("No controller found, check wiring, see readme.txt to enable debug. visit www.billporter.info for troubleshooting tips");

 else if(error == 2)
   Serial.println("Controller found but not accepting commands. see readme.txt to enable debug. Visit www.billporter.info for troubleshooting tips");

 else if(error == 3)
   Serial.println("Controller refusing to enter Pressures mode, may not support it. ");

 //Serial.print(ps2x.Analog(1), HEX);

 type = ps2x.readType();
 switch(type) {
 case 0:
   Serial.println("Unknown Controller type");
   break;
 case 1:
   Serial.println("DualShock Controller Found");
   break;
 case 2:
   Serial.println("GuitarHero Controller Found");
   break;
 }

}

void loop(){
 /* You must Read Gamepad to get new values
  Read GamePad and set vibration values
  ps2x.read_gamepad(small motor on/off, larger motor strenght from 0-255)
  if you don't enable the rumble, use ps2x.read_gamepad(); with no values
 
  you should call this at least once a second
  */

 if(error == 1) //skip loop if no controller found
   return;

 if(type == 2){ //Guitar Hero Controller    
 }

 else { //DualShock Controller

   ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed

   if(ps2x.Button(PSB_START))    
     digitalWrite(led1, HIGH);
   else if(ps2x.Button(PSB_SELECT))
     digitalWrite(led1, LOW);
   else {
   }

   //will be TRUE as long as button is pressed
   Serial.println("Start is being held");
   // if(ps2x.Button(PSB_SELECT))
   //    Serial.println("Select is being held");

   if(ps2x.Button(PSB_PAD_UP)) {         //will be TRUE as long as button is pressed
     Serial.print("Up held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_UP), DEC);
   }
   if(ps2x.Button(PSB_PAD_RIGHT)){
     Serial.print("Right held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_RIGHT), DEC);
   }
   if(ps2x.Button(PSB_PAD_LEFT)){
     Serial.print("LEFT held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_LEFT), DEC);
   }
   if(ps2x.Button(PSB_PAD_DOWN)){
     Serial.print("DOWN held this hard: ");
     Serial.println(ps2x.Analog(PSAB_PAD_DOWN), DEC);
   }  


   vibrate = ps2x.Analog(PSAB_BLUE);        //this will set the large motor vibrate speed based on
   //how hard you press the blue (X) button    

   if (ps2x.NewButtonState())               //will be TRUE if any button changes state (on to off, or off to on)
   {
     if(ps2x.Button(PSB_L3))
       Serial.println("L3 pressed");
     if(ps2x.Button(PSB_R3))
       Serial.println("R3 pressed");
     if(ps2x.Button(PSB_L2))
       Serial.println("L2 pressed");
     if(ps2x.Button(PSB_R2))
       Serial.println("R2 pressed");
     if(ps2x.Button(PSB_GREEN))
       Serial.println("Triangle pressed");
   }  

   if(ps2x.ButtonPressed(PSB_RED))             //will be TRUE if button was JUST pressed
     Serial.println("Circle just pressed");

   if(ps2x.ButtonReleased(PSB_PINK))             //will be TRUE if button was JUST released
     Serial.println("Square just released");    

   if(ps2x.NewButtonState(PSB_BLUE))            //will be TRUE if button was JUST pressed OR released
     Serial.println("X just changed");    


   if(ps2x.Button(PSB_L1)){
     digitalWrite(Mopen, HIGH);
     digitalWrite(Mclosed, LOW);
   }

   else if(ps2x.Button(PSB_R1)){ // print stick values if either is TRUE
     digitalWrite(Mopen, LOW);
     digitalWrite(Mclosed, HIGH);
   }
   else {
     digitalWrite(Mopen, LOW);
     digitalWrite(Mclosed, LOW);
   }

   if(ps2x.Analog(PSS_LY) > 139 && ps2x.Analog(PSS_LY) <= 255){
     int speed1 =map(ps2x.Analog(PSS_LY), 140 , 255, 0 , 255);
     analogWrite(Mopen, speed1);
     digitalWrite(Mclosed, LOW);
   }

   else if(ps2x.Analog(PSS_LY) >= 0 && ps2x.Analog(PSS_LY) <= 120){
     int speed1 =map(ps2x.Analog(PSS_LY),0 , 120, 255 , 0);
     digitalWrite(Mopen, LOW);
     analogWrite(Mclosed, speed1);
   }

   else {
     digitalWrite(Mopen, LOW);
     digitalWrite(Mclosed, LOW);
   }
   Serial.print("Stick Values:");
   Serial.print(ps2x.Analog(PSS_LY), DEC); //Left stick, Y axis. Other options: LX, RY, RX  
   Serial.print(",");
   Serial.print(ps2x.Analog(PSS_LX), DEC);
   Serial.print(",");
   Serial.print(ps2x.Analog(PSS_RY), DEC);
   Serial.print(",");
   Serial.println(ps2x.Analog(PSS_RX), DEC);
 }
 delay(50);
}

My GitHub:
https://github.com/AndrewMascolo?tab=repositories

Go Up