Maus-Scroll-Ersatz
« | 02 Jan 2020 | »Mama hat einen neuen Laptop, aber das Touchpad ist Mist. Wer im Browser damit “scrollen” will, braucht eine Dosis Antidepressiva.
Hmmm … ich hatte doch noch einen ATmega32U4 und eine Joystick Breakout-Platine in der Lade liegen …
Auf manchen Arduino
Seiten hat der “Leonardo” keinen besonders guten Ruf.
Das liegt unter anderem daran, dass er die serielle Schnittstelle etwas
anders einsetzt, als das ein UNO oder MEGA tun.
(Und damit meine ich nicht den Code der Gegenseite,
sieht damals…)
Der Arduino Leonardo basiert auf dem ATmega32U4 und im Gegensatz zum ATmega328p beim UNO hat er keinen separaten USB Chip für die Sketch-Uploads, weil er die USB-Kommunikation selbst beherrscht.
Und deshalb wird er auch etwas anders programmiert.
Die übliche Serial
Schnittstelle (sollte eigentlich Serial0
heißen und) ist hier dem virtuellen
USB-COM-Port zugeordnet und nicht den Pins 0
und 1
auf der Platine.
Für die Pins ist Serial1
instanziiert.
Doch eben gerade wegen der Einbettung von USB in den Mikrocontroller, können
wir USB auch auf Code-Ebene manipulieren.
Und daraus ergeben sich ungeahnte Möglichkeiten
Problemstellung: Ein virtuelle Maus
Ohne Hardwareunterstützung oder vernünftige Software-Emulation über Gesten
ist es durch ein Touchpad nicht ordentlich möglich, ein Scrollen auszulösen.
Man kann nur den Mauszeiger zu einer Scroll-Leiste schicken und dort auf
ein Pfeilchen oder die Leiste klicken.
Ein Touchpad hat eben kein Scroll-Rad … leider.
Doch über den Header mouse.h
bietet die Arduino-IDE “out-of-the-box” eine
Bibliothek an, mit der man eine HID
konforme Maus über den Chip nachbilden kann.
Das bedeutet, der Chip wird vom PC wie eine Maus erkannt und nun können wir
per Code Mausbewegungen und Aktionen zum PC senden, der diese dann umsetzt
und visualisiert.
Und wo bekommen wir die Infos her, in welche Richtung gescrollt werden soll?
Natürlich vom Joystick, der im Hintergrund für jede Achse einen verstellbaren
Widerstand nutzt um seine Ausrichtung zu melden.
analogRead()
gibt eine Wert zwischen 0 und 1023 zurück, je nachdem wie weit der Stick nach
oben oder unten (Y) bzw. links oder rechts (X) bewegt wurde.
Werte rund um 512 sollten die Mittelstellung darstellen. Wenn einem nur rauf oder runter bzw. links oder rechts Infos genügen, kann man sich einen Grenzwert für den gemessenen Pegel setzen, z.B.:
- alles kleiner 256 bedeutet Richtung A
- alles größer 768 bedeutet Richtung B
- und dazwischen bedeutet keine Richtung
ATmega32U4 + Widerstand = Joystick
Also lötet man den Joystick auf eine etwas größere Platine, wo man den ATmega32U4 auch draufsetzen kann, verbindet seine Achsen mit den analogen Eingängen, wie auch die Stromzu- und -abfuhr, schreibt etwas Code und fertig ist der Prototyp.
Man kann also mit ein paar Zeilen wie:
bereits seinen eigenen Scroll-Controller realisieren. Cool!
Etwas Ähnliches wäre auch mit Keyboard-Eingaben möglich und natürlich lassen sich noch andere USB-HID Standards nachahmen.
Fazit
Ich liebe unser Zeitalter. Dass man so schnell ein kleines Tool bauen kann, mit dem man Scroll-Eingaben an den PC senden kann, ist einfach nur genial.
Natürlich war das Spielzeug in erster Linie ein Proof-of-Concept und etwas
Zeitvertreib.
Mama fand es ein paar Minuten witzig, wollte dann aber doch lernen, wie man
mit dem Touchpad ohne den Zusatzsteuerknüppel dort hinkommt, wo man eben
hin will.
Und dafür braucht es etwas Übung, bis man mit den Fingern schneller wird.
Ich habe die Testplatine so gebaut, dass die MCU ein- und absteckbar ist
und kann das Teil somit noch für andere Zwecke recyclen.
Von daher ist keine Hardware verschwendet worden.
Und ja, ich weiß, mit meinem Arduino Esplora
wäre das ganze auch ohne Lötkolben in Sekundenschnelle fertig gewesen.
Aber hey … ein bisschen Beschäftigung an der Lötstation braucht man eben …