Pages: [1] 2   Go Down
Author Topic: Controllare joypad wireless della PS2  (Read 2076 times)
0 Members and 1 Guest are viewing this topic.
Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono riuscito a controllare un joypad wireless della ps2.
Ho utilizzato questa libreria http://pspunch.com/pd/files/library/GPSX.zip

Questo è il programma
Code:
#include <GPSXClass.h>
#undef round
int asd =0;
void setup()
{
  Serial.begin(9600);
  PSX.mode(PSX_PAD1, MODE_ANALOG, MODE_LOCK);
  
  PSX.motorEnable(PSX_PAD1, MOTOR1_ENABLE, MOTOR2_ENABLE);
  
  // Poll current state once.
  PSX.updateState(PSX_PAD1);
}

void loop()
{
  PSX.updateState(PSX_PAD1);
  int data1 = ANALOG_RIGHT_X(PSX_PAD1);
  int data2 = ANALOG_RIGHT_Y(PSX_PAD1);
  int data3 = ANALOG_LEFT_X(PSX_PAD1);
  int data4 = ANALOG_LEFT_Y(PSX_PAD1);

  
  if (IS_DOWN_CIRCLE(PSX_PAD1)) {
    PSX.motor(PSX_PAD1, MOTOR1_ON, ANALOG_RIGHT_X(PSX_PAD1));
  
  }
    
 if (PRESSED_CIRCLE(PSX_PAD1)) {
    Serial.println("Pressed circle");
  }

  if (RELEASED_CIRCLE(PSX_PAD1)) {
    Serial.println("Released circle");
    PSX.motor(PSX_PAD1, MOTOR1_OFF, 0);
  }    

  if (PRESSED_SQUARE(PSX_PAD1)) {
    Serial.println("Pressed square");
    PSX.mode(PSX_PAD1, MODE_DIGITAL, MODE_UNLOCK);
  }

  if (RELEASED_SQUARE(PSX_PAD1)) {
    Serial.println("Released square");
  }

  if (PRESSED_CROSS(PSX_PAD1)) {
    Serial.println("Pressed cross");
    PSX.mode(PSX_PAD1, MODE_ANALOG, MODE_UNLOCK);
    PSX.motorEnable(PSX_PAD1, MOTOR1_ENABLE, MOTOR2_ENABLE);
  }

  if (RELEASED_CROSS(PSX_PAD1)) {
    Serial.println("Released cross");
  }

  if (IS_DOWN_TRIANGLE(PSX_PAD1)) {
    PSX.motor(PSX_PAD1,MOTOR1_ON ,ANALOG_LEFT_X(PSX_PAD1));
  }
  
  if (PRESSED_TRIANGLE(PSX_PAD1)) {
    Serial.println("Pressed triangle");
  }

  if (RELEASED_TRIANGLE(PSX_PAD1)) {
    Serial.println("Released triangle");
    PSX.motor(PSX_PAD1, MOTOR1_OFF, 0x00);
  }
  
  if (PRESSED_UP(PSX_PAD1)) {
    Serial.println("Pressed Up");
  }
  if (RELEASED_UP(PSX_PAD1)) {
    Serial.println("Released Up");
  }
  
  if (PRESSED_DOWN(PSX_PAD1)) {
    Serial.println("Pressed Down");
  }
  if (RELEASED_DOWN(PSX_PAD1)) {
    Serial.println("Released Down");
  }
  if (PRESSED_LEFT(PSX_PAD1)) {
    Serial.println("Pressed Left");
  }
  if (RELEASED_LEFT(PSX_PAD1)) {
    Serial.println("Released Left");
  }
  if (PRESSED_RIGHT(PSX_PAD1)) {
    Serial.println("Pressed Right");
  }
   if (RELEASED_RIGHT(PSX_PAD1)) {
    Serial.println("Released Right");
  }
  if (PRESSED_CROSS(PSX_PAD1)) {
    Serial.println("Pressed cross");
    PSX.mode(PSX_PAD1, MODE_ANALOG, MODE_UNLOCK);
    PSX.motorEnable(PSX_PAD1, MOTOR1_ENABLE, MOTOR2_ENABLE);
  }

  if (RELEASED_CROSS(PSX_PAD1)) {
    Serial.println("Released cross");
  }

  if (IS_DOWN_TRIANGLE(PSX_PAD1)) {
    PSX.motor(PSX_PAD1, MOTOR1_ON, ANALOG_LEFT_X(PSX_PAD1));
  }

  if (PRESSED_TRIANGLE(PSX_PAD1)) {
    Serial.println("Pressed triangle");
  }

  if (RELEASED_TRIANGLE(PSX_PAD1)) {
    Serial.println("Released triangle");
    PSX.motor(PSX_PAD1, MOTOR1_OFF, 0x00);
  }
 if (PRESSED_R2(PSX_PAD1)) Serial.println("Pressed R2");
  
 if (RELEASED_R2(PSX_PAD1)) Serial.println("Released R2");
 
 if (PRESSED_R1(PSX_PAD1)) Serial.println("Pressed R1");
 
 if (RELEASED_R1(PSX_PAD1)) Serial.println("Released R1");
 
 if (PRESSED_L2(PSX_PAD1)) Serial.println("Pressed L2");
 
 if (RELEASED_L2(PSX_PAD1)) Serial.println("Released L2");
 
 if (PRESSED_L1(PSX_PAD1)) Serial.println("Pressed L1");
 
 if (RELEASED_L1(PSX_PAD1)) Serial.println("Released L1");
 
 if (PRESSED_SELECT(PSX_PAD1)) Serial.println("Pressed Select");
 
 if (RELEASED_SELECT(PSX_PAD1)) Serial.println("Released Select");
 
  if(PRESSED_STICK_RIGHT(PSX_PAD1)){
   Serial.println("analog right x= ");
   Serial.println(data1);
   Serial.println("analog right y= ");
   Serial.println(data2);
    }
 
 if(RELEASED_STICK_RIGHT(PSX_PAD1)) Serial.println("Released Right Stick");

 if(PRESSED_STICK_LEFT(PSX_PAD1)){
   Serial.println("analog left x= ");
   Serial.println(data3);
   Serial.println("analog left y= ");
   Serial.println(data4);
    }
 
 if(RELEASED_STICK_LEFT(PSX_PAD1)) Serial.println("Released Left Stick");
 
 if(PRESSED_START(PSX_PAD1)){
 Serial.println("analog right x= ");
 Serial.println(data1);
 Serial.println("analog right y= ");
 Serial.println(data2);
 Serial.println("analog left x= ");
 Serial.println(data3);
 Serial.println("analog left y= ");
 Serial.println(data4);
 }
 if(RELEASED_START(PSX_PAD1)) Serial.println("Released Start");
}



ecco un video in cui tento di spiegare come funziona... spero che capiate tutto e che vi sia utile... è un po' tirato via a causa del fatto che non so editare video su linux smiley-grin
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 489
Arduino addicted
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Great smiley
Dove l'hai recuperata la scatolina trasparente del regolatore a 9V?
Io quando provo a bucarle spacco sempre tutto smiley-razz
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

i sample della maxim li mandano in quelle scatoline smiley-grin ho usato una punta da trapano per il legno e un cacciavite!

ah dimenticavo che la vibrazione si può usare per un feedback che viene dalla sensoristica...
« Last Edit: March 04, 2010, 08:26:38 am by Calamaro » Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 489
Arduino addicted
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

a me li han mandati dentro i soliti tubi trasparenti. Cosa ti hanno mandato dalla Maxim per avere quelle scatole? la voglio anche io!!! smiley-grin smiley-grin: D
Logged

Forum Administrator
Torino, Italia
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 386
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

grande.

moooolto figo. Ha intenzione di postarlo sul tuo blog insieme al codice?
Oppure sul PlayGround?

La tua parlata toscana mi fa impazzire!
Un bel lavoro!


++
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok ora scrivo i tutorial che avevo promesso smiley-grin un plugin per gedit per l'indentazione del playground sarebbe dimolto utile...
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.arduino.cc/playground/Italiano/ArduinoPsx

Creato... spero che vada bene smiley-grin
Logged

Forum Administrator
Torino, Italia
Offline Offline
Sr. Member
*****
Karma: 4
Posts: 386
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
un plugin per gedit per l'indentazione del playground sarebbe dimolto utile...

indendi una cosa di questo tipo?
http://alexgorbatchev.com/wiki/SyntaxHighlighter


 
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 489
Arduino addicted
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Calamaro, dai un'occhiata qui: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1267975899

implementazione del controller PS2 wireless alla lettera! smiley-grin
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ottima cosa, era quello che volevo fare, ma purtroppo il mio cinesino mega mi ha salutato... quindi ora sarà il caso di prenderne uno originale e trattarlo con rispetto smiley-grin
Logged

0
Offline Offline
Sr. Member
****
Karma: 0
Posts: 489
Arduino addicted
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Uhm, non puoi saldarci sopra un altro ATmega? non dovrebbe essere complicato, se è lui il problema smiley-wink
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no no mi sa che è l'integrato della usb... se metto la mega il pc non vede nulla sulla porta tty/usb0 se metto il diecimila me lo vede... poi non so... ora provo a fare uno scambio tra FTDI e se non va peace and love... ne prendo un'altra!
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti. Ho realizzato il circuito qui proposto. Innanzi tutto volevo farvi i miei complimenti per le spiegazioni dettagliatissime e complete!! Ho però avuto dei problemini :'(... Tutto funziona e mi riconosce il controller wireless, purtoppo però nessun tasto corrisponde alla descrizione. Secondo voi è un problema dovuto alla differenza di marca del controller?
Non vorrei riconfigurare tutti i tasti :'(... Grazie mille e buon Arduino a tutti...
Logged

Campagne Aretine
Offline Offline
God Member
*****
Karma: 0
Posts: 808
Arduino è una figata
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

con l'ultima manopola wireless che ho comprato mi da codesto problema anche a me... per 10 euro su ebay non potevo pretendere più di tanto. Con l'altra dell' extreme non ho mai avuto problemi, finchè non l'ho rotta smiley-grin
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 2
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dici che mi conviene riconfigurare tutti i tasti? E' fattibile anche se veramente sbatti. Che marca hai preso? Io ne avevo uno GAMESTOP in casa e ho usato quello.
Logged

Pages: [1] 2   Go Up
Jump to: