Go Down

Topic: Controllare joypad wireless della PS2 (Read 2812 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

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

Creato... spero che vada bene :D

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