Dieses Projekt ermöglicht es, alte **DB9-Joysticks** (wie den Amiga-Joystick oder andere Retro-Joysticks) mit modernen Computern über **USB** zu verbinden. Mithilfe eines **Raspberry Pi Pico** und eines **DB9-Anschlusses** werden die Joystick-Eingaben ausgelesen und als USB-Gamepad-Signale ausgegeben, sodass der Joystick mit modernen Systemen und Emulatoren verwendet werden kann.
## Funktionen
- Unterstützt **DB9-Joysticks** (z. B. Amiga, C64, Atari)
- Erfasst **2 Achsen** (X und Y) und **1 Feuertaste**
- Wandelt Joystick-Eingaben in **USB HID**-Gamepad-Signale um
- Plug-and-Play auf modernen Betriebssystemen (Windows, Linux, macOS)
- Geschrieben in **C++** mit der **TinyUSB**-Bibliothek zur USB-HID-Unterstützung
## Hardwareanforderungen
- **Raspberry Pi Pico** (empfohlen wegen der einfachen USB-HID-Unterstützung)
- **DB9-Buchse** für den Joystick-Eingang
- **Kabel** für die Verbindungen
## Softwareanforderungen
- **Arduino IDE** mit Unterstützung für den Raspberry Pi Pico (RP2040 Boards)
- **Adafruit TinyUSB Library**
- **TinyUSB Library** (in der Adafruit-Bibliothek enthalten)
Stelle sicher, dass du diese Bibliotheken über den Bibliotheksmanager der Arduino IDE installierst.
## Schaltplan
Die Pins des DB9-Anschlusses müssen mit den entsprechenden GPIO-Pins des Raspberry Pi Pico verbunden werden:
| DB9-Pin | Signal | Pico-Pin |
|---------|------------|---------------|
| 1 | Hoch | GPIO 10 |
| 2 | Runter | GPIO 11 |
| 3 | Links | GPIO 12 |
| 4 | Rechts | GPIO 13 |
| 6 | Feuer | GPIO 14 |
| 8 | Masse | GND |
## Code-Erklärung
Die Firmware liest die Joystick-Eingaben aus und sendet die Daten als USB-Gamepad-Bericht. Die **TinyUSB-Bibliothek** übernimmt die USB-Kommunikation. Der Joystick hat zwei Achsen (X und Y) und eine Taste für den Feuerknopf.
Hier eine Zusammenfassung des verwendeten HID-Berichtsdeskriptors:
- **X- und Y-Achsen**: 8-Bit-Werte, Bereich von -127 bis +127
- **1 Taste**: 1-Bit-Wert (an/aus)
- **USB HID-Deskriptor-Format**: Benutzerdefinierter Berichtsdeskriptor für minimale Joystick-Eingaben
### Wichtige Funktionen
-`setup()`: Initialisiert das USB-Gerät und konfiguriert die GPIO-Pins als Eingänge.
-`loop()`: Liest den Status des Joysticks und sendet einen USB-Gamepad-Bericht an den Host.
-`usb_hid.sendReport()`: Sendet den HID-Bericht mit dem aktuellen Joystick-Zustand.
## Verwendung
1.**Firmware auf den Raspberry Pi Pico hochladen** über die Arduino IDE.
2.**DB9-Joystick an den Pico anschließen** über die Buchse.
3.**Pico mit dem PC verbinden**. Der Adapter wird als USB-Gamepad erkannt.
4. Funktionalität des Joysticks mit Tools wie `jstest` (Linux) oder den **Gamepad-Einstellungen** unter Windows testen.
## Testen
### Linux (`jstest`)
Um sicherzustellen, dass der Joystick korrekt funktioniert, kannst du das Tool **jstest** unter Linux verwenden:
### Windows
Öffne die **Systemsteuerung > Geräte und Drucker** und prüfe die **Gamecontroller-Einstellungen**, um die Joystick-Eingaben zu testen.