Arduino Joystick Shield V1.A

Das Joystick Shield ist ein vielseitiges Erweiterungsmodul für Arduino-Projekte, das speziell für die Steuerung von Robotern, Spielen und anderen interaktiven Anwendungen entwickelt wurde. Es bietet eine einfache Möglichkeit, einen zweiachsigen Joystick und mehrere Tasten in dein Projekt zu integrieren, ohne dass du dich um die komplizierte Verkabelung kümmern musst.
Es ist kompatibel mit verschiedenen Arduino-Boards wie Uno, Mega, Due und Leonardo und kann einfach aufgesteckt werden.
Der Joystick ermöglicht die Steuerung in X- und Y-Richtung, ähnlich wie bei einem Gamecontroller und kann auch gedrückt werden.
Das Shield verfügt über vier große Tasten und zwei kleine Tasten, die für verschiedene Eingabemöglichkeiten genutzt werden können.
Das Shield bietet weitere Schnittstellen. Laut Beschriftung für Nokia 5110 LCD und nRF24L01. Die übrig gebliebenen GPIO können aber wie gewohnt in verschiedene Projekten eingesetzt werden.

Hier will ich mal testen, wie in kommenden Projekten das Shield angesprochen wird und wie ich es in den Sketchen auswerte. Getestet wird mit OLED Display zur Anzeige der Werte.

Hardware:
Joystick Shield V1.A
Arduino Uno R4
OLED Display SSD1306

Pinbelegungsplan:
Hier ist eine Übersicht der wichtigsten Anschlüsse:

  • X-Achse des Joysticks: A0
  • Y-Achse des Joysticks: A1
  • Joystick-Taster (K): D8
  • Taster A (oben Gelb): D2
  • Taster B (rechts Blau): D3
  • Taster C (unten Gelb): D4
  • Taster D (links Blau): D5
  • Taster E: D6
  • Taster F: D7

Auf dem Joystick Shield sind noch weitere 12 gelbe Anschlüsse. Auch hier rüber sind Joystick und Tasten erreichbar.

In der oberen Reihe:

  • V: 5V Versorgungsspannung
  • A: Analoganschluss für den Joystick (X-Achse)
  • C: Analoganschluss für den Joystick (Y-Achse)
  • E: Taster E
  • K: Taster K (Joystick-Taster)
  • X: Analoganschluss für den Joystick (X-Achse)

In der unteren Reihe:

  • G: Masse (GND)
  • B: Taster B
  • D: Taster D
  • F: Taster F
  • Leer: Kein Anschluss
  • Y: Analoganschluss für den Joystick (Y-Achse)

Netzschalter zum Umschalten zwischen 3,3 und 5V ist für den Joystick gedacht und gegelt somit die auswertbaren stufenlosen X und Y Werte.

Bei 3,3 Volt: Unten&Links 0, Oben&Rechts 1023 und Ruhepunkt etwa bei 510

Bei 5 Volt: Unten&Links 0, Oben&Rechts 696 und Ruhepunkt etwa bei 348


Test:
Um das jetzt zu testen, wird das Shield auf einen Arduino Uno aufgesteckt. An A4 SDA und A5 SCL des OLED SSD1306 angeschlossen und mit GND und 3,3 V mit Spannung versorgt.

Quellcode:

Sketch / Quellcode < > anzeigen
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

const byte TasteA = 2;
const byte TasteB = 3;
const byte TasteC = 4;
const byte TasteD = 5;
const byte TasteE = 6;
const byte TasteF = 7;
const byte TasteK = 8;
const byte Joystickx = A0; //Analog A0
const byte Joysticky = A1; //Analog A0

int JoystickX;
int JoystickY;

boolean Agedruckt = false;
boolean Bgedruckt = false;
boolean Cgedruckt = false;
boolean Dgedruckt = false;
boolean Egedruckt = false;
boolean Fgedruckt = false;
boolean Kgedruckt = false;

void setup() {
  pinMode(TasteA, INPUT);
  digitalWrite(TasteA, HIGH);
  pinMode(TasteB, INPUT);
  digitalWrite(TasteB, HIGH);
  pinMode(TasteC, INPUT);
  digitalWrite(TasteC, HIGH);
  pinMode(TasteD, INPUT);
  digitalWrite(TasteD, HIGH);
  pinMode(TasteE, INPUT);
  digitalWrite(TasteE, HIGH);
  pinMode(TasteF, INPUT);
  digitalWrite(TasteF, HIGH);
  pinMode(TasteK, INPUT);
  digitalWrite(TasteK, HIGH);

  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(1000);
  display.clearDisplay();
}

void loop() {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);
  display.setCursor(0, 0);

  if (Agedruckt == digitalRead(TasteA)) {
    display.print("Gelbe Taste A aktiv");
    display.println();
  }
  if (Bgedruckt == digitalRead(TasteB)) {
    display.print("Blaue Taste B aktiv");
    display.println();
  }
  if (Cgedruckt == digitalRead(TasteC)) {
    display.print("Gelbe Taste C aktiv");
    display.println();
  }
  if (Dgedruckt == digitalRead(TasteD)) {
    display.print("Blaue Taste D aktiv");
    display.println();
  }
  if (Egedruckt == digitalRead(TasteE)) {
    display.print("SchwarzeTaste E aktiv");
    display.println();
  }
  if (Fgedruckt == digitalRead(TasteF)) {
    display.print("SchwarzeTaste F aktiv");
    display.println();
  }
  if (Kgedruckt == digitalRead(TasteK)) {
    display.print("JoystickTaste K aktiv");
    display.println();
  }

  JoystickX = analogRead(Joystickx);
  display.print("Joystick X: ");
  display.println(JoystickX);

  JoystickY = analogRead(Joysticky);
  display.print("Joystick Y: ");
  display.println(JoystickY);

  display.display();

  delay(1000);
}

Ergebnis:
Joystick bei 5 Volt und Anschlag X links:

Joystick im Ruhezstand und blaue Taste B ist gedrückt:

,