Arduino Leonardo / TastaturInput MausInput erkennen und ausführen

Schönen guten Tag,

Habe mir ein Arduino Leonardo Board gekauft um es zum Spielen am PC zu verwenden. Es soll einfache später auch schwierigere Maus- /Tastatureingaben ans System leiten.

Leider habe ich seit Tagen und Stunden es nicht geschafft.

Szenario1: Bei einem Tastendruck "r" (alternativ auch ein anderer Buchstabe oder auch mod+"r") soll Leonardo -> "r"-gedrückt halten, bis eine eine Taste, 1, 2, q, LMaus oder RMaus die schleife löst.

Szenario2:
Bei LM-Taste-gedrückt soll -> die linke LMaustaste in einer schleife gedrückt gedrückt werden.

Hier mal ein Beispiel.

#include <Mouse.h>

// Globale Variablen
bool MasterLock = false;           // Masterlock (gesperrt/entsperrt)
bool AutoClickerActive = false;    // Zustand des Autoclickers
bool MausClickLM = false;          // Zustand des linken Mausklick
const int RangedDelay = 100;       // Dauerfeuer-Verzögerung in Millisekunden

void setup() {
  Serial.begin(9600);  // Serielle Kommunikation starten
  Mouse.begin();
  Serial.println("Arduino AutoClicker gestartet!");
  Serial.println("Befehle: m = MasterLock umschalten, 2 = AutoClicker aktivieren, 1/q = AutoClicker deaktivieren");
}

void loop() {
  // Serielle Eingaben lesen
  if (Serial.available() > 0) {
    char input = Serial.read();

    // MasterLock umschalten
    if (input == 'm') {
      MasterLock = !MasterLock;
      AutoClickerActive = false; // AutoClicker deaktivieren
      MausClickLM = false;      // Schleife beenden
      Serial.println(MasterLock ? "MasterLock aktiviert" : "MasterLock deaktiviert");
    }

    // AutoClicker aktivieren
    if (input == '2' && !MasterLock) {
      AutoClickerActive = true;
      Serial.println("AutoClicker aktiviert");
    }

    // AutoClicker deaktivieren
    if (input == '1' || input == 'q') {
      AutoClickerActive = false;
      MausClickLM = false; // Schleife beenden
      Serial.println("AutoClicker deaktiviert");
    }
  }

  // LM-Taste aktiviert Schleife - AutoClicker vorausgesetzt
  if (AutoClickerActive && Mouse.isPressed(MOUSE_LEFT)) {
    MausClickLM = true;
    Serial.println("Feuer Frei!!");
  }

  // AutoClicker-Klicks ausführen, solange aktiviert
  while (MausClickLM && AutoClickerActive) {
    Mouse.click(MOUSE_LEFT); // Simuliere vollständigen Mausklick
    delay(RangedDelay);      // Pause zwischen den Klicks

    // Schleife beenden, wenn linke Maustaste nicht mehr gedrückt
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      MausClickLM = false;
      Serial.println("Feuer gestoppt.");
    }
  }

  delay(10); // CPU-Last reduzieren
}
tippe oder füge den Code hier ein

habe sehr viele verschiedene Varianten Probiert ohne Erfolg.

Ich freue mich auf eure Unterstützung.

Ich glaube, das funktioniert nicht ganz so wie Du möchtest, weil der Arduino mittels mouse.h-Bibliothek zwar im Stande ist, die Maus (und mittels keyboard.h auch Tastenaktionen) zu emulieren und den Zeiger und Klick-Aktionen zu steuern, allerdings erkennt der Arduino nicht, was du mit der Maus (oder dem Keyboard) machst. Der PC sendet diese Signale von Haus aus nicht an den angeschlossenen Arduino weiter.

Um diese Steuersignale zu empfangen und zu verarbeiten, benötigst Du ein USB-HOST-Modul. Damit erkennt der Ardu ein (oder auch mehrere??) angeschlossenes HID (Maus, Keyboard, Barcodescanner etc..) und dann können die empfangenen Signale ausgewertet und nach Deinem Gusto an den PC weitergegeben werden.

Ob das allerdings zeitlich und von der Menge an möglichen Signalen fließend und nicht verzögert passiert, wage ich zu bezweifeln. Eventuell bastelst Du Dir lieber ein Tastenfeld an den Leonardo, versiehst diese mit vordefinierten Makros/Tasten-Klick-Kombinationen und legst es neben die Tastatur :innocent:

1 Like

Falls du auf Windows arbeitest, könntest du mit AutoHotkey die gewünschten Aufgaben relativ einfach lösen. Damit kannst du sehr leicht Tasten- und Mausaktionen abfragen und auch ausführen. Es ist keine zusätzliche Hardware nötig, es bleibt alles in deinem Windows-PC.

Aber natürlich hat das gar nichts mit Arduino zu tun. :slight_smile:

1 Like

Das würde erklären warum die Verarbeitung von input = Serial.read() nicht akkurat zuverlässig funktioniert hat und warum ich für den Leonardo keine andere Möglichkeit gefunden habe Peripherieinput auszulesen.
Ich habe ein host Controller gefunden, der wird aber scheinbar nicht mehr vertrieben.
Zufällig Informationen welches andere Board das unterstützt bzw auf welche Spezifikationen man schauen muss?

Habe meinen Kopf mit den ganzen Versuchen dumm und fusselig programmiert.. vielen Dank für die Rückmeldung.

Die hid Bibliothek war übrigens ebenso vergebens. Bzw. Mithilfe von Patches scheint es teilweise zu klappen - zumindest scroll, num, Caps etc. auslesen.

AHK ist das was ich zurzeit nutze, leider hat AHK auch Grenzen. Ich hatte Probleme mit einem Tastendruck -> eine gedrückte Maustaste zu aktivieren, welche dann durch andere rasten Gelöst wird.

Überlege, ob man nicht besser versucht sich mit mod-erstellung zu beschäftigen. Die Mechanik wäre direkt im Spiel integriert.. Aber von AHK zu laut ist ein großer Sprung :grin:

Es gibt noch alte PS2 Tastaturen. Die kann der Arduino lesen und weiterleiten.
Wie das mit der Latenzzeit aussieht kann ich nicht sagen.

Grüße Uwe

1 Like