Module joystick V1.A

FunduinoDernière mise à jour le

Sechs Taster und einen Joystick auf einem Shield auslesen

Das Joystick-Shield V1.A wird einfach auf den Arduino gesteckt und ist sofort einsatzbereit – kein Steckbrett, keine Verkabelung. An Bord sind ein analoger Joystick mit Druckfunktion und sechs Taster.

In dieser Anleitung liest du beides aus und lässt dir die Werte im Seriellen Monitor anzeigen. Damit hast du die Grundlage für jede Fernsteuerung, jedes Menü und jedes Spiel.

Joystick-Shield V1.A mit Joystick und sechs Tastern
Das Joystick-Shield V1.A

Das Joystick-Shield V1.A

Das Joystick-Shield ist ein Aufsteckmodul: Du steckst es auf den Arduino und es ist sofort betriebsbereit – keine Verkabelung, kein Steckbrett.

An Bord sind ein analoger Joystick mit Druckfunktion und sechs Taster mit den Bezeichnungen A bis F.

Joystick-Shield V1.A mit Joystick und sechs Tastern
Das Joystick-Shield V1.A

Betriebsspannung und Wertebereich

Auf dem Shield sitzt ein Schalter, mit dem du zwischen 3,3 V und 5 V umschaltest. Das ändert den Wertebereich, den der Joystick liefert:

  • bei 5 V: 0 bis 1023
  • bei 3,3 V: ein entsprechend kleinerer Bereich

Das gilt für die X- und die Y-Achse gleichermaßen. In Ruhelage steht der Joystick etwa in der Mitte des Bereichs.

Der Artikel nennt für 5 V „0-1024(1023)“ und für 3,3 V „0-692“. Rechnerisch ergibt 3,3 V an der 5-V-Referenz eines 10-Bit-Wandlers rund 675. Beide Angaben sind zu prüfen.

Zahlenwerte des Joysticks in den vier Auslenkungsrichtungen
Die Werte bei 5 V Betriebsspannung

Die Pinbelegung

  • Taster A bis F – D2, D3, D4, D5, D6, D7
  • Joystick-Taste K (von oben drücken) – D8
  • Joystick X-Achse – A0
  • Joystick Y-Achse – A1

Für Fortgeschrittene bietet das Shield zusätzlich Anschlüsse für I²C (SDA an A4, SCL an A5) und für ein Bluetooth-Modul.

In der Liste des Artikels steht bei A1 „Joystick x-Axis“ – gemeint ist die Y-Achse.

Das Programm

Der Sketch gibt im Seriellen Monitor aus, welcher Taster gedrückt wurde und welche Werte der Joystick auf beiden Achsen liefert. Die Ausgabe wiederholt sich im Sekundentakt.

Im setup fehlen pinMode und digitalWrite für KnopfK. Pin 8 wird nie als Eingang mit Pull-up konfiguriert, die Abfrage des Joystick-Tasters liefert deshalb Zufallswerte.

Tasterzustände und Joystickwerte im Seriellen Monitor
So sieht die Ausgabe aus
Taster und Joystickposition im Seriellen Monitor ausgeben
const byte KnopfA = 2;     // Die Variablen werden deklariert
const byte KnopfB = 3;     // Wir verwenden die Deklaration "const byte", da die einzelnen Knöpfe konstant ("const") mit den jeweiligen Pins verbunden werden
const byte KnopfC = 4;
const byte KnopfD = 5;
const byte KnopfE = 6;
const byte KnopfF = 7;
const byte KnopfK = 8;
const byte PinJoystickX = 0;
const byte PinJoystickY = 1;
int JoystickX;
int JoystickY;
boolean Agedruckt = false;  // Festlegung der Variablen in den Grundzustand "false" – der entsprechende Taster ist um Grundzustand nicht betätigt
boolean Bgedruckt = false;
boolean Cgedruckt = false;
boolean Dgedruckt = false;
boolean Egedruckt = false;
boolean Fgedruckt = false;
boolean Kgedruckt = false;
void setup() // Hier beginnt das Setup
{
Serial.begin(9600);
pinMode(KnopfA, INPUT);   // Knopf A dient nun als Eingang und …
digitalWrite(KnopfA, HIGH);  // … wird in den Status "HIGH" versetzt
pinMode(KnopfB, INPUT);
digitalWrite(KnopfB, HIGH);
pinMode(KnopfC, INPUT);
digitalWrite(KnopfC, HIGH);
pinMode(KnopfD, INPUT);
digitalWrite(KnopfD, HIGH);
pinMode(KnopfE, INPUT);
digitalWrite(KnopfE, HIGH);
pinMode(KnopfF, INPUT);
digitalWrite(KnopfF, HIGH);
}
void loop() // Hier beginnt die Schleife
{
      if(Agedruckt == digitalRead(KnopfA))  // Wenn der Taster gedrückt wird…  (Auslesen durch den Befehl "digitalRead()")
          {
          Serial.print("Taster A betaetigt"); // …soll "Taster A betaetigt" ausgegeben werden
          Serial.println();
          }
      if(Bgedruckt == digitalRead(KnopfB))
          {
          Serial.print("Taster B betaetigt");
          Serial.println();
          }
      if(Cgedruckt == digitalRead(KnopfC))
          {
          Serial.print("Taster C betaetigt");
          Serial.println();
          }
      if(Dgedruckt == digitalRead(KnopfD))
          {
          Serial.print("Taster D betaetigt");
          Serial.println();
          }
      if(Egedruckt == digitalRead(KnopfE))
          {
          Serial.print("Taster E betaetigt");
          Serial.println();
          }
      if(Fgedruckt == digitalRead(KnopfF))
          {
          Serial.print("Taster F betaetigt");
          Serial.println();
          }
      if(Kgedruckt == digitalRead(KnopfK))
          {
          Serial.print("Joystick-Taster K betaetigt");
          Serial.println();
          }
      // Nun folgt das Auslesen der Position des Joysticks
          JoystickX = analogRead(PinJoystickX);    // Die Variable JoystickX dient als Speicher für den Wert der X-Achse
          Serial.print("Wert auf der X-Achse des Joysticks betraegt    ");
          Serial.println(JoystickX);
          JoystickY = analogRead(PinJoystickY);    // Die Variable JoystickY dient als Speicher für den Wert der Y-Achse
          Serial.print("Wert auf der Y-Achse des Joysticks betraegt    ");
          Serial.println(JoystickY);
Serial.println();   // Einfügen von Leerzeilen, damit die ausgegebenen Zahlenwerte klar zu lesen sind
Serial.println();
delay(1000);  // Die Werte (bzw. die Betätigung der Taster) sollen mit einem Delay von 1000ms (1 Sekunde) ausgegeben werden
}
Évaluer le guide

Commentaires

Poser une question ou partager une expérience

Écris-nous si quelque chose ne fonctionne pas. Indique-nous ton modèle de carte et le message d’erreur.

Nous vérifions chaque commentaire avant sa publication. Ton adresse e-mail reste chez nous.