int xValue = 512; // To store value of the X axis
int yValue = 512; // To store value of the Y axis
void setup() {
Serial.begin(9600) ;
#define VRX_PIN A1 // Arduino pin connected to VRX pin
#define VRY_PIN A0 // Arduino pin connected to VRY pin
#define SEL_PIN 12
pinMode(SEL_PIN, INPUT_PULLUP ); //pushbutton of joystick
#define LED_PIN1 11
pinMode(LED_PIN1, OUTPUT);
#define LED_PIN2 10
pinMode(LED_PIN2, OUTPUT);
#define LED_PIN3 9
pinMode(LED_PIN3, OUTPUT);
#define LED_PIN4 8
pinMode(LED_PIN4, OUTPUT);
#define LED_PIN5 7
pinMode(LED_PIN5, OUTPUT);
#define LED_PIN6 6
pinMode(LED_PIN6, OUTPUT);
#define LED_PIN7 5
pinMode(LED_PIN7, OUTPUT);
#define LED_PIN8 4
pinMode(LED_PIN8, OUTPUT);
}
void loop() {
// read analog X and Y analog values
xValue = -analogRead(VRX_PIN)+511.5;
yValue = analogRead(VRY_PIN)-511.5;
// print data to Serial Monitor on Arduino IDE
Serial.print(" x = ");
Serial.print(xValue);
Serial.print(", y = ");
Serial.println(yValue);
double theta = -2*atan(yValue/xValue); //don't understand why this 2 had to be multiplied to get correct reading of theta
Serial.print("theta =");
Serial.print(theta);
delay(200);
if (theta < .39 && theta > -.39){
digitalWrite(LED_PIN5, HIGH);}
else {digitalWrite(LED_PIN5, LOW);}
if (theta < 2 && theta > 1.2 ){
digitalWrite(LED_PIN3, HIGH);}
else {digitalWrite(LED_PIN5, LOW);}
int value = digitalRead(SEL_PIN);
if (value == LOW){
digitalWrite(LED_PIN1, HIGH);
digitalWrite(LED_PIN2, HIGH);
digitalWrite(LED_PIN3, HIGH);
digitalWrite(LED_PIN4, HIGH);
digitalWrite(LED_PIN5, HIGH);
digitalWrite(LED_PIN6, HIGH);
digitalWrite(LED_PIN7, HIGH);
digitalWrite(LED_PIN8, HIGH);
}
if (value == HIGH && xValue == 0 && yValue == 0) {
digitalWrite(LED_PIN1, LOW);
digitalWrite(LED_PIN2, LOW);
digitalWrite(LED_PIN3, LOW);
digitalWrite(LED_PIN4, LOW);
digitalWrite(LED_PIN5, LOW); // The top LED flahes as it has conflicting instructions caused by the value of atan(0/0) = 1.57...
digitalWrite(LED_PIN6, LOW);
digitalWrite(LED_PIN7, LOW);
digitalWrite(LED_PIN8, LOW);
}
}