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.
Inhaltsverzeichnis
- Mikrocontroller Arduino Leonardo im Überblick
- Vorbereitungen
- Programmieren einer Mausbewegung in der Arduino IDE
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.
Mikrocontroller | Atmega32u4 |
Betriebsspannung | 5 V |
Eingangsspannung (über Jack Adapter) | 7 bis 12 V |
digitale I/O Pins | 20, davon 7 als PWM Pins |
analoge Eingänge | 12 |
max. Stromaufnahme pro I/O Pin | 40 mA |
max. Stromaufnahme an3.3V Pin | 50 mA |
Speicher | 32 KB Flash Speicher, 2,5 KB SRAM, 1 KB EEPROM |
Taktgeschwindigkeit | 16 MHz |
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 <Mouse.h>‘?
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.
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 <Mouse.h> // 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.