Ardoino zwischen Maus und Computer zwischenschalten

Hi Leute,

ich habe vor den Eingang meiner Maus an den Arduino anzuschließen, dann soll der Arduino die Mausdaten kontinuierlich verändern (z. B. Invertieren oder Spiegeln).

Die veränderten Mausdaten sollen dann an den PC geschickt werden (USB oder PS/2), am besten soll der Computer die Maus auch so erkennen als ob der Arduino nicht da wäre um z. B. die Treiber und Software der Maus nutzen zu können.

Jetzt zu den fragen:

  1. Ist das so wie ich mir das vorgestellt hab realisierbar?
  2. Welche Probleme/Einschränkungen könnten auftreten?
  3. Lieber USB oder PS/2?
  4. Soll ich ein "USB Host Shield" benutzen oder ein USB Verlängerungskabel zerschneiden und die 4 Adern anschließen?
  5. Und warum benutzt ein Shield 28 Pins wenn USB nur 4 Signale verschickt?
  6. Ich beherrsche C und C++ reicht das oder muss ich mir da noch zusätzlich was aneignen?
  7. Mit wie viel Latenz kann ich rechen?
  8. Welcher Arduino ist dafür geeignet (Ich habe bereits einen Mega 2560 reicht der?)

Fragen über fragen ja ich weiß :sweat_smile:

Danke schon mal im voraus

Moin,

Welchen Sinn soll das haben?

Die Richtungen kann man doch sicher in der Software invertieren?!

Oder willst du damit temporär die Kollegen ärgern? Dann wäre sowas natürlich sinnvoll.

Lieben Gruß,
Chris

Im Nachhinein will ich noch Buttons einbauen die den "Modus" ändern aber das sollte kein Problem sein
Wenn es geht dann reche ich mit bis zu 30 Buttons (der Mega hätte schon mal genug Anschlüsse).

themanfrommoon:
Moin,

Welchen Sinn soll das haben?

Die Richtungen kann man doch sicher in der Software invertieren?!

Oder willst du damit temporär die Kollegen ärgern? Dann wäre sowas natürlich sinnvoll.

Lieben Gruß,
Chris

Ne es geht darum es ohne Software aufm PC zu lösen, das mit dem Inventieren war nur ein vereinfachtes Beispiel um das Thema vom Prinzip zu erklären.
Beispielsweise um dem Rückstoß in Shotergames entgegenzuwirken.

Ich hab auch darüber nachgedacht nen Treiber zu programmieren aber das sah mir auf den ersten Blick nach exorbitanten Aufwand aus als ich angefangen hab mich da rein zu lesen.

Also im Prinzip zum Steuern von Shootergames?
Gerade bei Shootergames kommt es ja extrem auf Latenzen an?!

Ist es dann nicht einfacher Sondertasten zu definieren?
Oder vielleicht eine käufliche Sondertastatur zu nehmen?

artem1311:
Ich hab auch darüber nachgedacht nen Treiber zu programmieren aber das sah mir auf den ersten Blick nach exorbitanten Aufwand aus als ich angefangen hab mich da rein zu lesen.

Dann bereite Dich schon einmal darauf vor, dass sich auch die zunächst einfach erscheinende Bastelei mit Arduino als ein Riesenfass erweisen kann.

Was intuitiv sehr einfach zu sein scheint, ist es in der Welt der Programmiererei oft nicht. Die Arbeit von Programmierern wird oft gnadenlos unterschätzt.

Gruß

Gregor

noiasca:
Maus/Keyboard emulieren mit einem Arduino Micro (ATmega32U4 !!!) oder einem Digispark ist einfach.

Das mag sein. Aber es geht ja nicht darum, einfach nur Eingaben zu simulieren, sondern Datenverkehr quasi zu belauschen und zu ändern. Der Teufel steckt oft im Detail.

Mein' ja nur so. Manchmal irrt man sich in der Annahme, welches Fass das kleinere ist und welches man besser zu lässt.

Gruß

Gregor

gregorss:
Dann bereite Dich schon einmal darauf vor, dass sich auch die zunächst oberflächlich erscheinende Bastelei mit Arduino als ein Riesenfass erweisen kann.

Was intuitiv sehr einfach zu sein scheint, ist es in der Welt der Programmiererei oft nicht. Die Arbeit von Programmierern wird oft gnadenlos unterschätzt.

Gruß

Gregor

Ich habe schon viel in C und C++ Programmiert und würde damit auch nicht anfangen wenn ich nicht auch Spaß daran hätte. Ich hab auch schon grob im Kopf wie man das alles Programmieren könnte und denke auch dass ich mit leichten Schwierigkeiten alles hinkriegen sollte.

Es geht mir gerade auch weniger ums Programmieren sondern um die Möglichkeiten des Arduinos.

Mein Mitbewohner ist Informatiker und er hat geschätzt dass die Latenz bei einem Raspberry Pie ca. 9ms betragen würde und ich gehe davon aus dass ein Arduino da schneller ist. Da es nur ne Annahme ist findet sich hier ja vielleicht jemanden der es bestätigen oder widerlegen kann.

Wäre schön wenn jemand die nummerierten Fragen beantworten kann.

noiasca:
Maus/Keyboard emulieren mit einem Arduino Micro (ATmega32U4 !!!) oder einem Digispark ist einfach.

Mit einem Atmega328 /2560 gabs die Tage mal auch einen Forumseintrag. Machbar aber nicht "mal so nebenbei gemacht". Suche etwas zurück - du wirst was finden.

Was dein Problem ist - ein USB Device auch auszulesen - und da habe ich noch kein Musterprojekt dazu gefunden (andere vieleicht schon,...)

Jap das wäre dann das nächste worauf ich mich stürzen würde.

Ich hatte mir gedacht durch den Output der Maus zu beobachten und hoffentlich ein Muster zu finden, dass man dann abändert und zum Beispiel wieder mit 4 Pins weiter schickt.

Mein Mitbewohner ist Informatiker und er hat geschätzt dass die Latenz bei einem Raspberry Pie ca. 9ms betragen würde und ich gehe davon aus dass ein Arduino da schneller ist.

Dann würde ich gleich einen MC mit höherer Taktfrequenz als einen Arduino wählen. Vielleicht einen ESP8266, ESP32 oder Teensy, dann sollte die Latenz weiter sinken.

Lieben Gruß,
Chris

Schau Dir auch mal die Teensy 3.2, 3.5 und 3.6 an, die sind schneller und können Tastatur und Maus.

Moin,
ist zwar nur ein kleiner Teil der Liste, aber etwas Senf kann ich beisteuern.

artem1311:
4. ... ein USB Verlängerungskabel zerschneiden und die 4 Adern anschließen?
5. Und warum benutzt ein Shield 28 Pins wenn USB nur 4 Signale verschickt?

4b: Ich denke, dass das keine gute Lösung ist. Lies mal über USB im Allgemeinen und Human Interface Devices im Speziellen - da musst Du aber ziemlich schnell sein auf zwei der vier Leitungen des USB (eine "SoftUSB"-Library für den Arduino ist mir noch nicht untergekommen).
Ein Kabel ist +5V, ein anderes GND, die anderen beiden im Prinzip eine serielle Schnittstelle (low speed bis 1.5Mbps) mit einem lustigen Protokoll drauf.

5: Es benutzt gar nicht alle 28 Pins. Aber es steckt sich so besser :slight_smile: Manche Shields sind stapelbar - da kann man dann weiter oben die unbenutzten doch noch verwenden.

Gruß Walter

  1. Soll ich ein "USB Host Shield" benutzen

Das halte ich erstmal für eine gute Idee.
Ein solches Shield auf einem Leonardo.

Ansonsten sind mir keine Arduino Kombinationen so präsent, mit denen das gehen würde.

Außer:
OK, der Arduino DUE kann auch "USB Host" spielen.
Aber dem fehlt dann wieder der USB zum PC, um Maus zu sein....
Ja, den vorhandenen ATMeta16U2, den könnte man dafür miss-/gebrauchen.
Ja!

themanfrommoon:
Dann würde ich gleich einen MC mit höherer Taktfrequenz als einen Arduino wählen. Vielleicht einen ESP8266, ESP32 oder Teensy, dann sollte die Latenz weiter sinken.

Lieben Gruß,
Chris

agmue:
Schau Dir auch mal die Teensy 3.2, 3.5 und 3.6 an, die sind schneller und können Tastatur und Maus.

Danke werd ich mir mal ansehen

wno158:
Moin,
ist zwar nur ein kleiner Teil der Liste, aber etwas Senf kann ich beisteuern.
4b: Ich denke, dass das keine gute Lösung ist. Lies mal über USB im Allgemeinen und Human Interface Devices im Speziellen - da musst Du aber ziemlich schnell sein auf zwei der vier Leitungen des USB (eine "SoftUSB"-Library für den Arduino ist mir noch nicht untergekommen).
Ein Kabel ist +5V, ein anderes GND, die anderen beiden im Prinzip eine serielle Schnittstelle (low speed bis 1.5Mbps) mit einem lustigen Protokoll drauf.

5: Es benutzt gar nicht alle 28 Pins. Aber es steckt sich so besser :slight_smile: Manche Shields sind stapelbar - da kann man dann weiter oben die unbenutzten doch noch verwenden.

Gruß Walter

asoo ja das ergibt Sinn dann wär da die Überlegung 2 aufeinander zu stecken und sich das getuhe mit den adern zu sparen (Maus in USB1 und USB2 mit nem male to male Kabel in den pc)

combie:
Das halte ich erstmal für eine gute Idee.
Ein solches Shield auf einem Leonardo.

Ansonsten sind mir keine Arduino Kombinationen so präsent, mit denen das gehen würde.

Außer:
OK, der Arduino DUE kann auch "USB Host" spielen.
Aber dem fehlt dann wieder der USB zum PC, um Maus zu sein....
Ja, den vorhandenen ATMeta16U2, den könnte man dafür miss-/gebrauchen.
Ja!

Ja über den Leonardo und DUE mit shields hab ich auch nachgedacht.

Ich hab mir gedacht dass der Mega 2560 den ich eh schon hab Hardwaretechnisch besser ist und mir ist nichts ins Auge gestochen was dagegen spricht

  1. Und warum benutzt ein Shield 28 Pins wenn USB nur 4 Signale verschickt?
  2. Ich beherrsche C und C++ reicht das oder muss ich mir da noch zusätzlich was aneignen?

Vieleicht solltest Du mal lernen wie USB funktioniert.
USB 2x hat nur 1 Signal.

Grüße Uwe

Die einzige halbwegs einfache Realisierung scheint mir zu sein:

  1. PS/2
  2. Wie schnell ist PS/2?
  3. Arduino Mega, hat mehrere serielle Schnittstellen

Mit USB wird das eher eine Doktorarbeit.

Mit USB wird das eher eine Doktorarbeit.

Dann hätte ich gerne den Hut!

ca 18 Minuten wird es dauern, die Grundfunktionalität herzustellen.
Incl. bestellen der Teile, IDE runter laden, installieren, Board auf stecken, Libraies saugen, Programm schreiben und auf den Leonardo laden.

Einzig der Postweg, der ......

Mit 'nem RasPi dürfte das noch einfacher gehen, aber wo bleibt dann der Spaß am Eigenbau?

DrDiettrich:
Mit 'nem RasPi dürfte das noch einfacher gehen, aber wo bleibt dann der Spaß am Eigenbau?

Ok, eine Maus am Raspberry anzuschließen, mag noch einfach gehen.
USB - Host kann der PI
Aber in einem selbst geschriebenen Programm, an alle Daten einer solchen Maus zu kommen, ist dann schon eine Hürde.

Aber dann einem PC eine Maus vorzuspielen?
Kann es das?

combie:
Dann hätte ich gerne den Hut!

Hallo Dr. combie!

combie:
Ansonsten sind mir keine Arduino Kombinationen so präsent, mit denen das gehen würde.

Weil das Arduino USB Host Shield als Retired markiert ist, bin ich über die Bibliothek zum USB_Host_Shield_2.0 vorgedrungen, wo eine erstaunlich lange Liste möglicher Hardware aufgelistet ist. Da sollte sich was Passendes finden lassen.

Wollte es nur erwähnt haben :slight_smile:

Hier gibts das sogar kompakt

:grin: Wollte es nur erwähnt haben :grin: