In diesem Beitrag möchte ich dir zeigen, wie du einen Arduino Leonardo mit einem kleinen Joystick als Mausersatz am Computer einsetzen kannst.
Dieser Beitrag ist aus einem Kommentar zum bereits veröffentlichten Beitrag zum Arduino UNO & Joystick Beitrag entstanden.
Bezug eines Joysticks für den Arduino Leonardo
Es gibt den kleinen Joystick für den Anschluss am Arduino oder auch Raspberry Pi (oder vergleichbarer Mikrocontroller) auf ebay.de für knapp 4 € aus dem asiatischen Raum.
Aber du findest diesen auch auf amazon.de oder aliexpress.com für einen ebenso günstigen Preis.
Warum ein Arduino Leonardo und kein UNO?
Der Leonardo verfügt über die Fähigkeit als USB HUD zu dienen. Das bedeutet das du über diesen Mikrocontroller Maus & Tastaturbefehle senden kannst.
Im Beitrag Arduino Lektion 68: 4×4 Matrix Tastatur habe ich bereits gezeigt wie man Tastaturbefehle an einen Computer sendet und somit die Software Eclipse steuern kann.
Aufbau der Schaltung am Arduino Leonardo
Für den Aufbau der Schaltung benötigst du einen Arduino Leonardo ein paar Breadboardkabel sowie einen Joystick.
Erstellen des Programmes in der Arduino IDE
Der nachfolgende Quellcode basiert auf dem Beispiel „Mouse.move()“ aus der Arduino Referenz. Jedoch habe ich dieses etwas abgewandelt.
In meinem Fall war die X Koordinate vertauscht!
#include <Mouse.h> // Taster des Joyesticks am digitalen Pin D2 angeschlossen #define mouseBtn 2 // Pins der Achsen #define xAxis A0 #define yAxis A1 // Mausgeschwindigkeit int range = 5; // Geschwindigkeit der Maus int responseDelay = 15; // Schwellwert für die übernahme einer Positionsänderung int threshold = range / 4; int center = range / 2; void setup() { pinMode(mouseBtn, INPUT_PULLUP); Mouse.begin(); } void loop() { int xAxisValue = analogRead(xAxis); xAxisValue = 1023 - xAxisValue; int yAxisValue = analogRead(yAxis); int xReading = calcDisplayPosition(xAxisValue); int yReading = calcDisplayPosition(yAxisValue); Mouse.move(xReading, yReading, 0); delay(responseDelay); if (digitalRead(mouseBtn) == LOW) { Mouse.press(MOUSE_LEFT); } else { Mouse.release(MOUSE_LEFT); } } int calcDisplayPosition(int axisValue) { int reading = map(axisValue, 1023, 0, 0, range); int distance = reading - center; if (abs(distance) < threshold) { distance = 0; } return distance; }