Banner Ausblenden
Kleines Logo

Willkommen auf PSI-Online

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

  }

 

Erstellt: Andreas Hecker (15.12.2015) Letzte Änderung: Luca Leon Hofmann (22.12.2015)