Arduino Leonardo als Maus: Simuliere Bewegungen und Klicks mit dem Joystick Shield
In diesem Beitrag zeige ich dir, wie du mithilfe des Arduino Leonardo eine Maus simulieren kannst und dabei das Joystick Shield HU-M16 einsetzt. Der Arduino Leonardo ist dabei unverzichtbar, da er den MEGA32u4 Chip verwendet, welcher das Feature USB-HID unterstützt. Dieser Chip ermöglicht es, Tastatur- und Mausaktionen direkt vom Mikrocontroller aus zu simulieren.
Arduino Leonardo als Maus: Simuliere Bewegungen und Klicks mit dem Joystick Shield
Mikrocontroller Arduino Leonardo im Überblick
Für diesen Beitrag verwende ich den Arduino Leonardo von Keystudio dieser steht dem Original in nichts nach, kostet dabei zusätzlich weniger als die Hälfte.
Herzstück von diesem Mikrocontroller ist der Atmel MEGA32U4 Chip, welcher neben den genannten Feature vom Simulieren von Tastatur und Mausaktionen noch weitere hat. MikrocontrollerAtmega32u4Betriebsspannung5 VEingangsspannung (über Jack Adapter)7 bis 12 Vdigitale I/O Pins20, davon 7 als PWM Pinsanaloge Eingänge12max. Stromaufnahme pro I/O Pin40 mAmax. Stromaufnahme an3.3V Pin50 mASpeicher32 KB Flash Speicher, 2,5 KB SRAM, 1 KB EEPROMTaktgeschwindigkeit16 MHz
Chip - MEGA32U4 vom Arduino Leonardo
Vorbereitungen
Vor dem Einstieg in die Programmierung teile ich gerne meine Erfahrungen. An meinem PC nutze ich drei Monitore, dazu eine Tastatur und Maus. Bei der Simulation einer Mausbewegung mit dem Arduino Leonardo stört die vorhandene "echte" Computermaus. Während meiner Tests musste ich stets die Computermaus ausschalten. Außerdem gestaltete sich die Arbeit mit allen drei Monitoren weniger vorteilhaft.
Programmieren einer Mausbewegung in der Arduino IDE
Für die Simulation einer Mausbewegung erhalten wir eine kleine Bibliothek zur Arduino IDE mitgeliefert. Diese Bibliothek ist nur lauffähig, wenn ein Arduino Leonardo ausgewählt wurde! Solltest du also den nachfolgenden Fehler erhalten, so prüfe zunächst, ob der korrekte Mikrocontroller ausgewählt wurde. Compilation error: 'Mouse' not found. Does your sketch include the line '#include '? Beispiel von Arduino.cc Auf der englischen Seite https://www.arduino.cc/reference/en/libraries/mouse/ findest du nicht nur eine ausführliche Anleitung zu den Events des Mouse Objektes, sondern auch ein lauffähiges Beispiel mit einem Joystickmodul. https://youtu.be/VcH7inmLyik Das Beispiel ist lauffähig, jedoch fehlt noch die Funktion zum Klicken der linken und rechten Maustaste und auch war dieses sehr unnötig umständlich programmiert. Ich habe mir die Freiheit genommen und dieses umgeschrieben. //Bibliothek zum simulieren einer Aktion mit der Maus. #include // Taster des linken Joysticks am digitalen Pin D2 angeschlossen #define mouseBtnLeft 2 // Taster des rechten Joysticks am digitalen Pin D2 angeschlossen #define mouseBtnRight 4 // Pins der X & Y Achsen #define xAxis A0 #define yAxis A2 // 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() { //Pins der Taster über den internen 10kOhm Widerstand leiten pinMode(mouseBtnLeft, INPUT_PULLUP); pinMode(mouseBtnRight, INPUT_PULLUP); Mouse.begin(); } void loop() { //auslesen des aktuellen Wertes der xAchse int xAxisValue = analogRead(xAxis); xAxisValue = 1023 - xAxisValue; //auslesen der yAchse int yAxisValue = analogRead(yAxis); int xReading = calcDisplayPosition(xAxisValue); int yReading = calcDisplayPosition(yAxisValue); //umkehren des Wertes der yAchse yReading = -yReading; //Bewegen des Mauszeigers zur neuen Koordinate Mouse.move(xReading, yReading, 0); //eine kleine Pause delay(responseDelay); //Wenn der linke Taster betätigt wird, //dann soll die linke Maustaste betätigt werden. if (digitalRead(mouseBtnLeft) == LOW) { Mouse.press(MOUSE_LEFT); } else { Mouse.release(MOUSE_LEFT); } //Wenn der rechte Taster betätigt wird, //dann soll die rechte Maustaste betätigt werden. if (digitalRead(mouseBtnRight) == LOW) { Mouse.press(MOUSE_RIGHT); } else { Mouse.release(MOUSE_RIGHT); } } //Berechnen der neuen Position aus dem analogen Wert //von 0 bis 1023. int calcDisplayPosition(int axisValue) { int reading = map(axisValue, 1023, 0, 0, range); int distance = reading - center; if (abs(distance) < threshold) { distance = 0; } return distance; } Damit du den gesamten Code nicht abtippen oder kopieren musst, kannst du dir hier das gezippte Programm zum simulieren einer Maus am Arduino Leonardo herunterladen. Programm zum steuern des Mauszeigers mit dem Arduino Joystick Shield HU-M16 am Arduino LeonardoHerunterladen Read the full article


















