Go Down

Topic: Controllare joypad wireless della PS2 (Read 2 times) previous topic - next topic

Calamaro

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: [Select]

#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");
}


http://www.youtube.com/watch?v=ig-4hq4jIvE

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 :D

NetWorm

Great :)
Dove l'hai recuperata la scatolina trasparente del regolatore a 9V?
Io quando provo a bucarle spacco sempre tutto :P

Calamaro

#2
Mar 04, 2010, 02:19 pm Last Edit: Mar 04, 2010, 02:26 pm by Calamaro Reason: 1
i sample della maxim li mandano in quelle scatoline :D 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...

NetWorm

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

Davide

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!


++

Calamaro

ok ora scrivo i tutorial che avevo promesso :D un plugin per gedit per l'indentazione del playground sarebbe dimolto utile...

Calamaro


Davide

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


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




NetWorm

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

implementazione del controller PS2 wireless alla lettera! :D

Calamaro

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 :D

NetWorm

Uhm, non puoi saldarci sopra un altro ATmega? non dovrebbe essere complicato, se è lui il problema ;)

Calamaro

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!

Guarse

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...

Calamaro

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 :D

Guarse

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.

Go Up