Here I am about to write a tutorial about a cheap joystick I came across lately which can be bought for only 3.5$ with free shipping to Norway. It is a PS2 repair kit which can easily be used with Arduino concept as well (the input voltage is 5+). It can detect all 8 directions in 2D dimension and also Clicked feature.
Joystick tutorial
Purchase link:
http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340
Here the outputs from the joystick are only VRx, VRy, SW, GND and +5V.
VRx = x value (see program)
VRy = y value (see program)
SW = if Clicked or Not -> Clicked = 0, NOT clicked = 1
-----------------------
/*
JOYSTICK Program connected to Arduino
http://www.dealextreme.com/p/repair-parts-replacement-analog-stick-module-for-ps2-controller-black-121340
Developer:
Akbar (Shahab) F. Moghaddam
20.05.12
Comment : Front, Back, left, right
*/
//CONSTANTS
const int pinX = 2;
const int pinY = 1;
const int pinSW = 0;
//VARIABLE
int VRx = -999;
int VRy = -999;
int SW = -999;
int readVal = 0;
boolean logging = false;
void setup() {
// initialize the digital pin as an output.
// Pin 13 has an LED connected on most Arduino boards:
pinMode(13, OUTPUT);
pinMode(0, INPUT);
pinMode(1, INPUT);
pinMode(2, INPUT);
Serial.begin(19200);
}
void loop() {
initialAll();
readValues();
loggingProcess();
printState();
delay(1000);// wait for a second
}
void initialAll(){
readVal = 0;
}
void readValues(){
VRx = analogRead(pinX);
VRy = analogRead(pinY);
SW = analogRead(pinSW);
if (Serial.available()>0){
readVal = Serial.read();
}
}
void loggingProcess(){
if (readVal == 'l'){
if (logging)
logging = false;
else
logging = true;
}
if (logging){
Serial.println("------------");
Serial.println("SYUMMARY");
Serial.print("X:");
Serial.println(VRx);
Serial.print("Y:");
Serial.println(VRy);
Serial.print("SW is:");
Serial.println(SW);
Serial.println("------------");
}
}
void printState(){
if (SW == 0){
Serial.println("------------");
Serial.println("CLICKED");
Serial.println("------------");
}
else if (VRx > 330 && VRx < 350 && VRy > 325 && VRy < 350){
Serial.println("------------");
Serial.println("NORMAL");
Serial.println("------------");
}//NORMAL
else if (VRx > 660 && VRx < 700 && VRy > 325 && VRy < 350){
Serial.println("------------");
Serial.println("FRONT");
Serial.println("------------");
}//FRONT
else if (VRx < 5/*==0*/ && VRy > 325 && VRy < 350){
Serial.println("------------");
Serial.println("BACK");
Serial.println("------------");
}//BACK
else if (VRx > 330 && VRx < 350 && VRy < 5 /*==0*/){
Serial.println("------------");
Serial.println("LEFT");
Serial.println("------------");
}//LEFT
else if (VRx > 330 && VRx < 350 && VRy > 665 && VRy < 700){
Serial.println("------------");
Serial.println("RIGHT");
Serial.println("------------");
}//RIGHT
else if (VRx > 350 && VRx < 680 && VRy > 350 && VRy < 670){
Serial.println("------------");
Serial.println("FRONT-RIGHT");
Serial.println("------------");
}//FRONT-RIGHT
else if (VRx >= 0 && VRx < 350 && VRy > 350 && VRy < 680){
Serial.println("------------");
Serial.println("BACK-RIGHT");
Serial.println("------------");
}//BACK-RIGHT
else if (VRx >= 0 && VRx < 330 && VRy >= 0 && VRy < 325){
Serial.println("------------");
Serial.println("BACK-LEFT");
Serial.println("------------");
}//BACK-LEFT
else if (VRx > 350 && VRx < 680 && VRy >= 0 && VRy < 325){
Serial.println("------------");
Serial.println("FRONT-LEFT");
Serial.println("------------");
}//FRONT-LEFT
else{
Serial.println("------------");
Serial.println("UNKNOWN");
Serial.println("------------");
}//UNKNOWN
}
why are you setting VRx and VRy to -999
ReplyDelete