Aufgabe 22.1 : LEDs mithilfe eines Joystick Moduls erleuchten

Material: Arduino / vier Leuchtdioden / Breadboard / Kabel (Materialbeschaffung: www.funduinoshop.com)

In der nachfolgenden Aufgabe möchten wir die Lageposition des Joystick Moduls visualisieren.
Wir blicken also zuerst auf das Modul selbst.

Auf den ersten Blick fällt auf dass das Modul fünf Anschlüsse(Pins) verwendet.

GND – Ground Pin, anzuschließen an den GND Pin des Arduinos.
+5V – Pin für die Stromversorgung, anzuschließen am 5V Pin des Arduinos.
VRx – Pin für die X-Achse des Joystick Moduls, anzuschließen am Pin A0.
VRy – Pin für die Y-Achse des Joystick Moduls, anzuschließen am PIN A1.
SW – Pin für den sogenannten „Switch“. Der Pin wird in diesem Sketch nicht verwendet und dient der absolut genauen Bestimmt der Joystickpositon.

Das Joystick Modul verwendet die 5V Spannung des Arduinos, also einer 10 Bit Reichweite (2^10).
Dementsprechend definiert das Modul die Lage des Joysticks durch die Zahlenreichweite 0 – 1024(1023).

Deutlich wird dies, wenn wir uns spezifisch das Verhalten des Moduls in verschiedenen Lagen betrachten.

Wenn man das Modul an den Endanschlag auf der linken Seite bewegt, so registriert der Mikrocontroller der Zahlenwert 1023 auf der X-Achse.
Bewegt man den Joystick nun auf die andere Seite, so registriert der Mikrocontroller den Zahlenwert 0 auf der x-Achse.
Ähnlich verhält es sich bei den Anschlägen oben (1023) und unten (0) auf der Y-Achse.

So weit, so klar?

Dann schauen wir uns jetzt die Visualisierung mithilfe der LEDs an.
Hierzu müssen wir die LEDs mit dem Arduino verbinden.

In unserem Sketch definieren wir die LEDs wie folgt :

– LED für den Anschlag „oben“ an Pin 7
– LED für den Anschlag „unten“ an Pin 4
– LED für den Anschlag „links“ an Pin 2
– LED für den Anschlag „rechts“ an Pin 12

 

 

Sobald die Verkabelung abgeschlossen ist und wir unser Ergebnis noch einmal überprüft haben, schauen wir uns den Sketch an.

 

Der Sketch :

int ledUnten = 4;
int ledOben = 7;
int ledLinks = 2;
int ledRechts = 12;                                                                                
 int SensorWert = 0;   // Festlegen der Variablen
 
void setup() 
    {
     pinMode(ledUnten, OUTPUT);   // Definieren der LEDs
     pinMode(ledOben, OUTPUT);
     pinMode(ledLinks, OUTPUT);
     pinMode(ledRechts, OUTPUT);
     Serial.begin(9600);
    }
 
void loop() 
{
       SensorWert = analogRead(0);   // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
       
       Serial.print("X:");  // Darstellung des Wertes im Seriellen Monitor
       Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
       
       
             if (SensorWert > 1010)  // Wenn der Wert größer als 1010 ist, dann...
                 {
                  digitalWrite(ledLinks, HIGH); // ...soll ledLinks leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 {
                  digitalWrite(ledLinks, LOW); // ...soll ledLinks nicht mehr leuchten
                 }
             
             if (SensorWert < 20 )  // Wenn der Wert größer als 20 ist, dann...
                 {
                  digitalWrite(ledRechts, HIGH); // ...soll ledRechts leuchten
                 }
             
             if (SensorWert > 20)  // Wenn der Wert kleiner als 20 ist, dann...
                 {
                  digitalWrite(ledRechts, LOW); // ...soll ledRechts nicht mehr leuchten
                 }
       
      
       SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
              
       Serial.print(" |Y:");      
       Serial.print(SensorWert, DEC);

       
       
             if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
                 {  
                  digitalWrite(ledOben, HIGH); // ...soll ledOben leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 { 
                  digitalWrite(ledOben, LOW);  // ...soll ledOben nicht mehr leuchten
                 }
             
             if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
                 {  
                  digitalWrite(ledUnten, LOW); // ...soll ledUnten leuchten
                 }
             
             if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
                 {  
                  digitalWrite(ledUnten, HIGH); // ...soll ledUnten nicht mehr leuchten
                 } 
             
      
}


Aufgabe 22.2 : Ein einzelnes Joystick Modul soll LEDs zum leuchten bringen. Zusätzlich soll durch die Betätigung des integrierten Tasters ein Ton erzeugt werden.

Material: Arduino / vier Leuchtdioden / Breadboard / Kabel / Piezospeaker (Materialbeschaffung: www.funduinoshop.com)

 

Das Joystick Modul besitzt einen Drucktaster, welcher beispielsweise auch bei gängigen Spielekonsolen zu finden ist.

Dieser Taster wird nun mithilfe des „SW(Switch)“ Pins angesteuert und wird am analogen Pin A2 angeschlossen.
Betätigt man nun den Taster, registriert der Mikrocontroller den Zahlenwert 0. Im unbetätigten Zustand beträgt dieser SensorWert >400.

Damit wir uns diese Information in Form einer Tonausgabe zu nutze machen können, ist es notwendig, einen Piezospeaker (also einen OUTPUT) zu installieren.
Der Speaker wird, ähnlich wie die LEDs, an Pin 8 angeschlossen und soll einen Ton ausgeben wenn der SensorWert 0 entspricht, also der Taster betätigt worden ist.

Der vorhergehende Sketch wird nun also durch eine if/else (wenn…dann/sonst…) Bedingung erweitert.

 

Der Sketch :

 

int ledUnten = 4;
int ledOben = 7;
int ledLinks = 2;
int ledRechts = 12;                                                                                
 int SensorWert = 0;   // Festlegen der Variablen
 int piezo=8;
 
 
void setup() 
    {
     pinMode(ledUnten, OUTPUT);   // Definieren der LEDs
     pinMode(ledOben, OUTPUT);
     pinMode(ledLinks, OUTPUT);
     pinMode(ledRechts, OUTPUT);
     pinMode(piezo, OUTPUT);
     Serial.begin(9600);
    }
 
void loop() 
{
       SensorWert = analogRead(0);   // Auslesen des Wertes, der an A0 anliegt. Hier : VRx - X-Achse
       
       Serial.print("X:");  // Darstellung des Wertes im Seriellen Monitor
       Serial.print(SensorWert, DEC); // Darstellung des Wertes als Dezimalzahl
       
       
             if (SensorWert > 1010)  // Wenn der Wert größer als 1010 ist, dann...
                 {
                  digitalWrite(ledLinks, HIGH); // ...soll ledLinks leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 {
                  digitalWrite(ledLinks, LOW); // ...soll ledLinks nicht mehr leuchten
                 }
             
             if (SensorWert < 20 )  // Wenn der Wert größer als 20 ist, dann...
                 {
                  digitalWrite(ledRechts, HIGH); // ...soll ledRechts leuchten
                 }
             
             if (SensorWert > 20)  // Wenn der Wert kleiner als 20 ist, dann...
                 {
                  digitalWrite(ledRechts, LOW); // ...soll ledRechts nicht mehr leuchten
                 }
       
      
       SensorWert = analogRead(1); // Auslesen des Wertes, der an A1 anliegt. Hier : VRy - Y-Achse
              
       Serial.print(" |Y:");      
       Serial.print(SensorWert, DEC);

       
       
             if (SensorWert > 1010) // Wenn der Wert größer als 1010 ist, dann...
                 {  
                  digitalWrite(ledOben, HIGH); // ...soll ledOben leuchten
                 }
             
             if (SensorWert < 1010) // Wenn der Wert kleiner als 1010 ist, dann...
                 { 
                  digitalWrite(ledOben, LOW);  // ...soll ledOben nicht mehr leuchten
                 }
             
             if (SensorWert > 20) // Wenn der Wert größer als 20 ist, dann...
                 {  
                  digitalWrite(ledUnten, LOW); // ...soll ledUnten leuchten
                 }
             
             if (SensorWert < 20) // Wenn der Wert kleiner als 20 ist, dann...
                 {  
                  digitalWrite(ledUnten, HIGH); // ...soll ledUnten nicht mehr leuchten
                 } 



                 

         SensorWert = analogRead(2);  // Auslesen des Wertes, der an A2 anliegt. Hier : Switch(Taster) des Joystick Moduls

         Serial.print(" |Z:");
         Serial.println(SensorWert,DEC);
         
         if (SensorWert < 20)  // Wenn der Wert kleiner als 20 ist, dann...

         {
          digitalWrite(piezo,HIGH); // ...soll ein Ton ausgegeben werden...
         }

         else   //            // ...sollte die Bedingung (Sensorwert kleiner 20) nicht erfüllt sein...
         {
          digitalWrite(piezo,LOW); // ...soll der Ton nicht mehr ausgegeben werden
         }
         
             
      
}