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