PS2 ohjaimen arvoja voidaan lukea SPI väylää käyttäen. Ohjelma on tehty ohjaamaan radio-ohjattavaa vesisuihkulla toimivaa venettä. Vaatii PS2 ohjaimelle tehdyn kirjaston, löytyy täältä .

Ohjaus:

R1 ja L1 = kasvattaa kierroksia yhdellä

R2 ja L2 = kasvattaa kierroksia kahdella

Ympyrä  = asettaa kierrokset nollaan

X             =   moottorin päälle

Neliö      = moottori pois päältä

Oikea tatti ohjaa kauhaa vasen / oikea

Vasen tatti ohjaa kauhaa ylös / alas

Johdotus:

Liitä vain johdot 1,2,4,5,6,7.

SPI johdot 1,2,6,7 arduinoon:

1 = MISO = 50 

2 = MOSI = 51

6 = CSB  = 53

7 = SCK = 52

Koodi:

 #include <PS2X_lib.h>

PS2X ps2x;

int error = 0;
byte type = 0;
byte vibrate = 0;
byte taulukko[8];
int rpm;
int onOff;

void setup(){
   Serial.begin(115200);
   error = ps2x.config_gamepad(52,51,53,50, 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");
    }   
    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. ");
    }
 
   type = ps2x.readType();
     switch(type) {
       case 1:
        Serial.println("DualShock Controller Found");
       break;

     }
 
}

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

 if(type == 1){ //DualShock Controller
 
    ps2x.read_gamepad(false, vibrate);          //read controller and set large motor to spin at 'vibrate' speed
 
    if(ps2x.ButtonPressed(PSB_L1) && onOff==0x01)            
         {
         if (rpm>0)
         rpm--;
         }
         
    if(ps2x.ButtonPressed(PSB_R1) && onOff==0x01)            
         {
         if (rpm<255)
         rpm++;
         }
         
    if(ps2x.ButtonPressed(PSB_L2) && onOff==0x01)            
         {
         if (rpm>1)
         rpm=rpm-2;
         }
         
    if(ps2x.ButtonPressed(PSB_R2) && onOff==0x01)            
         {
         if (rpm<254)
         rpm=rpm+2;
         }
         
    if(ps2x.ButtonPressed(PSB_RED) && onOff==0x01)            
         rpm=0;        
         
    if(ps2x.ButtonPressed(PSB_BLUE))            
         onOff=0x01;
         
    if(ps2x.ButtonPressed(PSB_PINK) && rpm==0)            
         onOff=0x00;
    
    Serial.print(rpm,DEC);       //rpm
    Serial.print(" ");
    Serial.print(ps2x.Analog(PSS_RX),DEC); //suunta
    Serial.print(" ");
    Serial.print(ps2x.Analog(PSS_LY),DEC); //kauha ylös/alas   
    Serial.print(" ");
    Serial.println(onOff,DEC);               //moottori on/off   
}
 delay(100);
     
}
  • No labels
You must log in to comment.