Nr. 24 – Joystick Modul V1.A

Aufgabe 24 : Das Joystick Modul V1.A in Betrieb nehmen

Material : Arduino, Joystick Modul V1.A (Materialbeschaffung www.funduinoshop.com)

In dieser Aufgabe möchten wir uns die Position des im V1.A Modul integrierten Joysticks, sowie die Betätigung der sechs Taster „A,B,C,D,E,F“ im seriellen Monitor anzeigen lassen.

Die Installation des Joystick Moduls mit dem Arduino ist relativ simpel.
Das Joystick Modul ist ein Shield, welches auf den Arduino aufgesteckt wird und unmittelbar betriebsbereit ist.
Es verfügt darüber hinaus über einen Schalter, mit dem man zwischen einer 3,3V oder einer 5V Spannung variieren kann.

Wenn man die 5V Spannung des Arduinos für das Shield verwendet, definiert der Joystick die Lage durch die Zahlenreichweite 0-1024(1023). Nutzt man allerdings die 3,3V Spannung , definiert der Joystick die Lage durch die Zahlenreichweite 0-692.
Dies gilt sowohl für die X, als auch für die Y-Achse.

Bei anliegender 5V Spannung lassen sich folgende Zahlenwerte ablesen :

Die Pinbelegung sieht folgendermaßen aus:

A=Taster A – Pin Digital D2
B=Taster B – Digital D3
C=Taster C – Digital D4
D=Taster D – Digital D5
E=Taster E – Digital D6
F=Taster F – Digital D7
K=Joystick Taste K (Joystick von oben drücken) – Digital D8
X=Joystick X-Axis – Analog A0
Y=Joystick Y-Axis – Analog A1

Fortgeschrittene Arduino-Anwender können darüber hinaus über das Shield auch Bluetooth und I2C werdenden. Die Pinbelegungen sehen dabei so aus:

I2C:
SDA – A4, SCL – A5, 5V und GND zu den jeweiligen Pins

Bluetooth:
+ an 3,3V, – an GND, R über 1 kOhm an Pin 1 (Tx) und GND , T an Pin 0 ( Rx)

Als nächstes folgt ein Sketch, der die Eingaben am Shield am Seriellen Monitor darstellt.

Der Sketch :

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
}

Fortgeschrittene Arduino-Anwender können darüber hinaus über das Shield auch weitere Module einbinden:

I2C Pinbelegung
SDA – A4, SCL – A5, 5V und GND zu den jeweiligen Pins

Bluetooth Pinbelegung
+ an 3,3V, – an GND, R über 1 kOhm an Pin 1 (Tx) und GND , T an Pin 0 ( Rx)

Nokia LCD Pinbelegung

SCLKSerial ClockDigitalD9
CSNChip Select (Active Low)DigitalD10
D/CData / CommandDigitalD11
RSTRESETDigitalD12
SCEChip Enable (Active Low)DigitalD13

NRF24L01 Pinbelegung

SCEChip Enable (RX TX Mode Select)DigitalD9
CSNChip Select (Active Low)DigitalD10
SCKSerial ClockDigitalD11
MOSIMaster Out Slave InDigitalD12
MISOMaster In Slave OutDigitalD13