Joystick
Allgemein:
Ein Joystick ist ein Eingabegerät (Input Device), das von Computer- und Videospielen her bekannt ist. Aber auch bei Fernsteuerungen im Modellbau als auch im Cockpit von Flugzeugen werden sie eingesetzt, wobei die Bezeichnung im Cockpit ‘Sidestick‘ lautet.
Oftmals werden mittels Joystick zwei Achsen gesteuert, die x- und die y-Achse (im Flugzeug PITCH und ROLL).
Spezifisch:
Der im Arduino Sensorkit verwendete analoge Joystick besteht aus zwei Potentiometern und einem Taster. Das Bauteil befindet sich im Grundzustand in einer Mittelstellung, in die es nach Auslenkung in xy-Richtung durch Federkraft zurück versetzt wird. Der Taster wird durch Drücken betätigt( z-Komponente).
Elektrische Eigenschaften:
Die Anbindung des Joysticks an den Arduino wird wie folgt vorgenommen:
Die beiden Achsen x und y werden an zwei Analogeingänge und der Taster (switch) an einen digitalen Pin verbunden.
Joystick Arduino UNO
SW -------------------------------- Digital 8
VRx ------------------------------- A0
VRy ------------------------------- A1
+5V ------------------------------- 5V
GND ------------------------------GND
Da das Modul keinen integrierten Pullup-Widerstand für den Taster besitzt, muss der digitale Pin mittels Softwarebefehl in der setup-Funktion zur Verfügung gestellt werden:
pinMode (Pin, INPUT_PULLUP);
Da die analogen Eingänge beim Arduino einen 10-Bit Analog-Digital-Wandler besitzen, werden die analogen Spannungen (0 bis +5V) in Werte von 0 bis 1023 gewandelt. Da sich der Joystick in einer Mittelposition befindet, werden in Ruhestellung Werte um die 512 angezeigt und besitzen an den Endanschlägen den Wert 0 und 1023.
Der Taster wird mittels Pullup-Widerstand auf +5V (High) und bei Betätigung auf ‘0‘ (Low) gezogen.
Beispielprogramm:
In einem Beispielprogramm in nachfolgendem Listing wird die Helligkeit von 2 Leds mittels Joystick verändert, je eine Led für x- und y-Achse. Mit dem Taster wird eine dritte Led ein- und ausgeschaltet.
Code Beispiel:
const int xPin = A0; // x-Achse an A0
const int yPin = A1; // y-Achse an A1
const int zPin = 8; // Taster an Pin8
const int xLED = 3; // Led für x-Achse an Pin3(PWM)
const int yLED = 5; // Led für y-Achse an Pin5(PWM)
const int zLED = 10; // Led für Taster an Pin10
int wert_x; // Variable für x-Achse
int wert_y; // Variable für y-Achse
int wert_z = HIGH; // Variable für Taster
void setup()
{
pinMode(zPin,INPUT_PULLUP); // Portpin für Taster als Eingang mit Pullup
pinMode(xLED,OUTPUT); // Portpin für Led x-Achse als Ausgang
pinMode(yLED,OUTPUT); // Portpin für Led y-Achse als Ausgang
pinMode(zLED,OUTPUT); // Portpin für Led Taster als Ausgang
Serial.begin(9600); // Baudrate für serielle Schnittstelle
}
void loop()
{
wert_x = map(analogRead(xPin), 0, 1023, 0, 255); // Einlesen und Wandlung x
analogWrite(xLED,wert_x); // Ausgabe an x-Led
wert_y = map(analogRead(yPin), 0, 1023, 0, 255); // Einlesen und Wandlung y
analogWrite(yLED,wert_y); // Ausgabe an y-Led
wert_z = digitalRead(zPin); // Einlesen des Tasters
if ( wert_z == HIGH ) // Falls Taster nicht gedrückt
{
digitalWrite (zLED, LOW); // Led OFF
}
else
{
digitalWrite (zLED, HIGH); // Led ON
}
Serial.print("X: "); // Ausgabe des Wertes der x-Achse
Serial.print((wert_x),DEC);
Serial.print("|Y: "); // Ausgabe des Wertes der y-Achse
Serial.print((wert_y),DEC);
Serial.print("|Z: "); // Ausgabe des Tasters
Serial.println(wert_z);
delay(500);
}