KY-023 Joystick Modul (XY-Achsen): Unterschied zwischen den Versionen
Aus Linkerkit.de
(→Pin-Belegung) |
|||
Zeile 1: | Zeile 1: | ||
==Bild== | ==Bild== | ||
− | [[Datei:ky-023.jpg | + | [[Datei:ky-023.jpg|none|358x358px]] |
==Technische Daten / Kurzbeschreibung== | ==Technische Daten / Kurzbeschreibung== | ||
X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben. | X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben. | ||
+ | |||
+ | In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut. Diese ergeben einen Spannungsteiler, wie dieser im folgendem Bild aufgezeigt wird | ||
+ | |||
+ | |||
+ | {| style="height: 567px;" width="847" | ||
+ | |- | ||
+ | || | ||
+ | [[Datei:KY-023_VoltDivide.JPG|none|516x552px]] | ||
+ | |||
+ | || | ||
+ | Im Ruhezustand befindet sich das Potentiometer in der Mitte, so dass Widerstand1=Widerstand2, womit auch die angelegte Spannung sich gleichmäßig auf beide verteilt - z.B Messwert Bei +V=5V -> 2.5V. | ||
+ | |||
+ | Wird jetzt die Position von der z.B. X-Achse verändert, so ändern sich die jeweiligen Widerstände abhängig zur aktuellen Position - z.B. geht es in die eine Richtung so wird Widerstand 1 kleiner und Widerstand 2 größer, geht es in die andere Richtung, so wird dann Widerstand 1 größer und Widerstand 2 kleiner. | ||
+ | |||
+ | Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dieses in einen jeweiligen Spannungswert, den man zwischen den Widerständen (beim Potentiometer sog. Schleifer) messen und somit die Position der Achse bestimmen kann. | ||
+ | |||
+ | |} | ||
==Pin-Belegung== | ==Pin-Belegung== | ||
− | [[Datei: | + | [[Datei:4_Joystick.png|none|450x235px]] |
==Codebeispiel Arduino== | ==Codebeispiel Arduino== | ||
− | <pre class="brush:cpp">// | + | Das Programm liest die aktuellen Werte der Eingang-Pins, konvertiert diese in eine Spannung (0-1023 -> 0V-5V) und gibt diese auf der seriellen Ausgabe aus. |
− | + | ||
− | int JoyStick_X = A0; // | + | <pre class="brush:cpp">// Deklaration und Initialisierung der Eingang-Pins |
− | int JoyStick_Y = A1; // | + | int JoyStick_X = A0; // X-Achse-Signal |
− | int | + | int JoyStick_Y = A1; // Y-Achse-Signal |
+ | int Button = 3; // Knopf | ||
+ | |||
void setup () | void setup () | ||
{ | { | ||
pinMode (JoyStick_X, INPUT); | pinMode (JoyStick_X, INPUT); | ||
pinMode (JoyStick_Y, INPUT); | pinMode (JoyStick_Y, INPUT); | ||
− | pinMode ( | + | pinMode (Button, INPUT); |
− | Serial.begin (9600); // 9600 bps | + | |
+ | // Da der Knopf das Signal beim druecken auf Masse zieht, | ||
+ | // schalten wir hiermit den PullUp-Widerstand ein | ||
+ | digitalWrite(Button, HIGH); | ||
+ | |||
+ | Serial.begin (9600); // Serielle Ausgabe mit 9600 bps | ||
} | } | ||
+ | |||
+ | // Das Programm liest die aktuellen Werte der Eingang-Pins | ||
+ | // und gibt diese auf der seriellen Ausgabe aus | ||
void loop () | void loop () | ||
{ | { | ||
− | + | float x, y; | |
− | x = analogRead (JoyStick_X); | + | int Knopf; |
− | y = analogRead (JoyStick_Y); | + | |
− | + | //Aktuelle Werte werden ausgelesen, auf den Spannungswert konvertiert... | |
− | Serial.print (x, | + | x = analogRead (JoyStick_X) * (5.0 / 1023.0); |
− | + | y = analogRead (JoyStick_Y) * (5.0 / 1023.0); | |
− | Serial.print (y, | + | Knopf = digitalRead (Button); |
− | Serial.print (" | + | |
− | Serial.println ( | + | //... und an dieser Stelle ausgegeben |
− | delay ( | + | Serial.print ("X-Achse:"); Serial.print (x, 4); Serial.print ("V, "); |
+ | Serial.print ("Y-Achse:"); Serial.print (y, 4); Serial.print ("V, "); | ||
+ | Serial.print ("Knopf:"); | ||
+ | |||
+ | if(Knopf==1) | ||
+ | { | ||
+ | Serial.println (" nicht gedrueckt"); | ||
+ | } | ||
+ | else | ||
+ | { | ||
+ | Serial.println (" gedrueckt"); | ||
+ | } | ||
+ | delay (200); | ||
} | } | ||
</pre> | </pre> |
Version vom 5. April 2016, 10:51 Uhr
Inhaltsverzeichnis
Bild
Technische Daten / Kurzbeschreibung
X und Y Position des Joysticks, werden als analoge Spannung auf den Ausgangspins ausgegeben.
In diesem Joystick wurde für die X-Achse, sowie für die Y-Achse, ein eigenes Potentiometer verbaut. Diese ergeben einen Spannungsteiler, wie dieser im folgendem Bild aufgezeigt wird
Im Ruhezustand befindet sich das Potentiometer in der Mitte, so dass Widerstand1=Widerstand2, womit auch die angelegte Spannung sich gleichmäßig auf beide verteilt - z.B Messwert Bei +V=5V -> 2.5V. Wird jetzt die Position von der z.B. X-Achse verändert, so ändern sich die jeweiligen Widerstände abhängig zur aktuellen Position - z.B. geht es in die eine Richtung so wird Widerstand 1 kleiner und Widerstand 2 größer, geht es in die andere Richtung, so wird dann Widerstand 1 größer und Widerstand 2 kleiner. Je nachdem wie sich die Widerstände untereinander aufteilen, resultiert dieses in einen jeweiligen Spannungswert, den man zwischen den Widerständen (beim Potentiometer sog. Schleifer) messen und somit die Position der Achse bestimmen kann. |
Pin-Belegung
Codebeispiel Arduino
Das Programm liest die aktuellen Werte der Eingang-Pins, konvertiert diese in eine Spannung (0-1023 -> 0V-5V) und gibt diese auf der seriellen Ausgabe aus.
// Deklaration und Initialisierung der Eingang-Pins int JoyStick_X = A0; // X-Achse-Signal int JoyStick_Y = A1; // Y-Achse-Signal int Button = 3; // Knopf void setup () { pinMode (JoyStick_X, INPUT); pinMode (JoyStick_Y, INPUT); pinMode (Button, INPUT); // Da der Knopf das Signal beim druecken auf Masse zieht, // schalten wir hiermit den PullUp-Widerstand ein digitalWrite(Button, HIGH); Serial.begin (9600); // Serielle Ausgabe mit 9600 bps } // Das Programm liest die aktuellen Werte der Eingang-Pins // und gibt diese auf der seriellen Ausgabe aus void loop () { float x, y; int Knopf; //Aktuelle Werte werden ausgelesen, auf den Spannungswert konvertiert... x = analogRead (JoyStick_X) * (5.0 / 1023.0); y = analogRead (JoyStick_Y) * (5.0 / 1023.0); Knopf = digitalRead (Button); //... und an dieser Stelle ausgegeben Serial.print ("X-Achse:"); Serial.print (x, 4); Serial.print ("V, "); Serial.print ("Y-Achse:"); Serial.print (y, 4); Serial.print ("V, "); Serial.print ("Knopf:"); if(Knopf==1) { Serial.println (" nicht gedrueckt"); } else { Serial.println (" gedrueckt"); } delay (200); }