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ä
...
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:
Code Block |
---|
#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);
}
|