Last updated on 14 November 2020 by Suffocation
Eine Zusatzplatine für den Arduino Uno und kompatible. Sie besitzt nicht viel mehr als einen USB Anschluss. Hieran kann diverse Peripherie wie Mäuse, Tastaturen, Gamepads und Festplatten angeschlossen werden.
Da beim Arduino kein Betriebssystem vorhanden ist, welches diverse Treiber bietet, ist die Funktionalität durch die Bibliothek begrenzt. Es können natürlich neue Treiber selbst geschrieben werden und die gefundene Bibliothek (s.u.) bietet auch schon einiges.
I found a nice project online that controls a cursor on an LCD display using a mouse. To see if I was capable of doing it myself, I've modified it slightly without looking at the existing code.
Areas of application
Generell kann die USB Platine dazu verwendet werden diverse Devices an zu schließen, hier nur ein kleiner Auszug:
- Connecting HID devices like mice and keyboards
- Using PS3/4 controllers
- Xbox Controller
- Accessing Mass Storage*
- Connecting Bluetooth Adapters
- ...
*USB Sticks und Festplatten könnten Probleme machen, so ist beispielsweise der Arduino Uno zu klein.
Facts
The facts are quite brief, the board includes:
- USB port
- Reset Button
Stückliste
- USB expansion board
- Arduino Uno or compatible
- USB mouse (a cheap Logitech for me)
- LCD Display
- A few pin header cables
Views
Programming
Libraries
USB
There is a library that has become very extensive:
https://github.com/felis/USB_Host_Shield_2.0
I have copied the files from the USB library used into the project folder. ACHTUNG: es sind nur die benötigten Dateien im Ordner.
Graphics
Da die Adafruit Display-Bibliothek und die USB Bibliothek nicht gemeinsam auf einen Uno passen habe ich nach einer kleineren Graphikbibliothek ausschau gehalten. Im Netz bin ich auf die u8g Bibliothek gestoßen:
https://github.com/olikraus/u8glib
Diese Bibliothek habe ich über den Bibliotheksmanager eingebunden., da sie viele Dateien enthält und ich auf die Arbeit verzichten wollte nur die Benötigten heraus zu suchen.
The integration of libraries in general is described under the following link, and I will not go into further detail here.
https://fambach.net/arduino-ide#Bibliotheken
Test programme
Test 1 – Read out mouse
Als erstes Testprogramm habe ich das Beispiel Mousetest aus der Bibliothek verwendet. Ich habe die MouseRptParser Klasse so angepasst, dass die Mouse-Werte für die aktuelle Postion sich nur im validen Bereich des Displays verändern. (In X-Richtung von 0-127 bewegen und in Y-Richtung von 0-63). Der Faktor gibt an wie schnell sich die Werte ändern sollen und enspricht der Mausgeschwindigkeit. 0,1 ist sehr langs … 1,0 sehr schnell. Bei 0.1-0.2 liegt für mich ungefähr die Wahrheit. Sonst macht die Klasse nichts ausser die Werte auf der Console auszugeben.
Test 2 – Graphics
Um die Graphik Bibliothek zu testen, habe ich 3 Symbole auf das Display gezeichnet (Ein Kreis, ein Dreieck und ein Rechteck). Ein keinerer Kreis, welcher den Cursor darstellen soll, läuft automatisch von links nach rechts. Die großen Symbole haben einen Kollissions-Erkennung. Sollte der „Cursor“ auf sie treffen füllen sie sich mit der Vordergrundfarbe. Der Cursor selbst wird dann mit der Hintergundfarbe gezeichnet.
Ich habe für jedes der Symbole und den Cursor eine Klasse erstellt welche auch die Kollissionskontrolle übernimmt.
Here is the example program:


It's a shame USB sticks hardly ever work.
nix USB stick FAT or FAT32 support.. simply doesn't work with Arduino
Hello StockingOwl,
Thanks for your contribution. At first, I didn't want to believe it, but being able to read certainly helps; it's in the header for the Mass Storage driver. I researched this a bit because I still found it hard to believe. My current understanding is that it doesn't work with an Arduino Uno and this library. It's missing the 3rd timer; even if you managed with two, the memory would be too small. While there are success stories, they're rather haphazard and only use fragments of this or other libraries. Furthermore, it seems possible to address USB flash drives via a special USB controller. However, the controller handles the work in that case. It's supposed to work on the ATmega, though. I haven't tried it yet, but I will. I'll update the post in the coming weeks.
Hello
Stefan