RC Viewer, RC Gamepad, Rennspiele am Computer mit einer Modellbaufernsteuerung spielenMit RC Gamepad kann man Rennspiele am Computer mit einer Modellbaufernsteuerung für ferngesteuerte Autos (und ähnliches) spielen. Ich verwende einen Teensy 3 und eine 6 Kanal Fernsteuerung mit Empfänger. RC Gamepad kann Menschen mit Behinderung helfen Rennspiele am Computer zu spielen. Ich habe zwei Programme veröffentlicht:
RC Gamepad kann als Gamepad verwendet werden und es kann auch den Xbox 360 Controller, sowie einen PlayStation 3 Controller emulieren (siehe Beschreibung bzgl. Einschränkungen). Hardware
QuellcodesRC Viewer: rcviewer-20220821.zip, Lizenz: MIT RC Gamepad: rcgamepad-20221004.zip, Lizenz: GPLv2 Videos
Externer Inhalt blockiert. Ansehen auf YouTube RC Gamepad/Controller MappingModus InformationVerschiedene Blinkmodi, wenn die Fernsteuerung beim Einschalten vom Teensy nicht mit Strom versorgt wird, und für den Modus 1 - 'Spielmodus', den Modus 2 - 'Menümodus' und den Modus 3 - 'alternativen Tastenmodus'. Funktionsbeschreibung, SchaltplanDer RC-Empfänger übermittelt die Informationen mittels Impulslängen. Die Impulslänge liegt zwischen einer minimalen und einer maximalen Länge. Die Länge des Impulses entspricht dem Winkel des Servos oder der Drehgeschwindigkeit des Motors. Die Impulse von Kanal 1 entsprechen dem Lenkrad, die Impulse von Kanal 2 entsprechen dem Beschleunigen/Bremsen usw. Die Impulse werden am Teensy über digitale Eingangspins ausgelesen. Die Zustandsänderungen Low/High werden mittels Interrupts registriert. Der RC-Empfänger kann mit 4,8 V-12 V arbeiten und wird über die 5 V der Teensy USB-Verbindung versorgt. Ausgabe vom Teensy als serielles USB-Gerät (Programm RC Viewer) und MinicomKanalbeispielKanal 1, Lenkrad der Fernsteuerung.
PulsdiagrammDiese Werte stammen von meinem Empfänger. Sie können die Werte Ihres Empfängers mit RC Viewer auslesen. RC Viewer1. RC Viewer ProgrammbeschreibungDas Programm liest die Impulslängen von einem RC-Empfänger aus. Die Werte werden auf einem seriellen Terminal angezeigt. Die serielle Übertragung kann entweder mit dem Teensy als USB Serial-Gerät oder über die seriellen Pins des Teenys stattfinden. Sie können das Programm 'minicom' verwenden, um die Ausgabe anzuzeigen. Lizenz: MIT, siehe LICENSE.txt Download: rcviewer-20220821.zip 2. Hardware
3. ProgrammdetailsHauptprogramm: rcviewer.cpp 3.1. Serielle AusgabeSetup im Bereich: Terminal connection
Teensy als USB Serial-Gerät: #define serial Serial Aktualisierungsrate in Millisekunden: #define TERMINAL_REFRESH_MS 200 3.2. Ausgabe Device Nodes
Teensy als USB Serial-Gerät: /dev/ttyACM0 3.3. Beispiele mit Minicomminicom -b 115200 -D /dev/ttyACM0 -o minicom -b 115200 -D /dev/ttyUSB0 -o Minikom verlassen: Drücken Sie STRG-A und dann 'q'. 3.4. RC-EmpfängerSetup im Bereich: Remote control Anzahl der Kanäle: #define RC_NUM_CHANNELS 6 Teensy Pins: rc_interrupt_pin[RC_NUM_CHANNELS] = {18, 19, 20, 21, 22, 23}; 3.5. Kanäle konfigurierenKanal 1, üblicherweise das Lenkrad: RC_InitChannel (1, Isr1); Kanal 2, üblicherweise Beschleunigen/Bremsen: RC_InitChannel (2, Isr2); 4. Programm kompilieren4.1. Compiler installierenLaden Sie Arduino IDE herunter und installieren Sie das Programm
Laden Sie Teensyduino herunter und installieren Sie das Programm in das Arduino IDE-Verzeichnis 4.2. Makefile konfigurierenÖffnen Sie das Makefile von RC Viewer und konfigurieren Sie folgende Variablen: • die Variable ARDUINO_HOME auf das Arduino IDE Installationsverzeichnis. • die Variable M_ARDUINO_VERSION auf die Arduino IDE Version. • die Variable M_TEENSYDUINO_VERSION auf die Teensyduino Version. • die Variable M_TEENSY_VERSION, falls Sie ein anderes Teensy 3 Modell verwenden als 3.2. 4.3. KompilierenFühren Sie 'make' aus um das Programm zu kompilieren. Das kompilierte Programm (rcviewer.hex) finden Sie im Verzeichnis 'bin'. 5. Teensy flashen5.1. ToolVerwenden Sie das Programm 'teensy_loader_cli' um das Teensy zu flashen. 5.2. Befehl zum FlashenDrücken Sie die weiße Taste des Teensy um in den Flash-Modus zu wechseln. Zum Flashen starten Sie: teensy_loader_cli -mmcu=mk20dx256 -v -w bin/rcviewer.hex Sie können auch das Skript 'flash' verwenden: ./flash RC Gamepad - Game Controller1. RC Gamepad ProgrammbeschreibungRC Gamepad ist gedacht um mit einer Modellbaufernsteuerung Computer Rennspiele zu spielen. RC Gamepad kann als USB-Gamepad verwendet werden, einen Xbox 360-Controller oder einen PlayStation 3-Controller emulieren. Die emulierten Konsolencontroller funktionieren NICHT auf ihren Konsolen, da der erforderliche Sicherheitsmechanismus nicht implementiert ist. Die USB-Deskriptoren werden mit diesem Quellcode nicht ausgeliefert. Sie können die USB-Deskriptoren mit dem Tool 'getdescriptors' erhalten, wenn Sie den original Controller besitzen. Siehe '9. Konsolencontroller' für weitere Informationen. Lizenz: GPLv2, siehe LICENSE.txt Download: rcgamepad-20221004.zip 2. Hardware
3. ProgrammdetailsHauptprogramm: rcgamepad.cpp 3.1. Controller-Typ
Setzen Sie CONTROLLER_TYPE Variable. Mögliche Werte sind CONTROLLER_GAMEPAD CONTROLLER_XBOX360 CONTROLLER_PS3 Beispiel: #define CONTROLLER_TYPE CONTROLLER_GAMEPAD Weitere Informationen finden Sie unter '9. Konsolencontroller'. 3.2. Debug-AusgabeDas Debuggen ist optional. Für die Verbindung mit einem seriellen Terminal verwenden Sie ein USB-zu-RS232 Kabel. Setzen Sie die DEBUG_TYPE Variable. Mögliche Werte sind DEBUG_NONE, DEBUG_USB_CONFIGURE, DEBUG_USB_IN_REPORT, DEBUG_USB_OUT_REPORT, DEBUG_USB_DATA, DEBUG_USB_VERBOSE Die Variable DEBUG_TYPE ist eine Bitmaske. Verwenden Sie das 'logische Oder' für die Kombination von mehreren Optionen.
Beispiele: #define DEBUG_TYPE DEBUG_NONE #define DEBUG_TYPE (DEBUG_USB_CONFIGURE | DEBUG_USB_OUT_REPORT) #define DEBUG_TYPE DEBUG_USB_VERBOSE 3.3. RC-Werte anzeigenSie können die RC-Werte mit einem seriellen Terminal anzeigen. Aktivieren Sie
#define PRINT_RC_VALUES If PRINT_RC_VALUES is enabled, then the screen will be shown automatically. If PRINT_RC_VALUES is not enabled, then the screen can be enabled on demand by pressing the key 'v'. Wenn PRINT_RC_VALUES aktiviert ist, werden die Werte automatisch angezeigt. Wenn PRINT_RC_VALUES nicht aktiviert ist, kann die Anzeige bei Bedarf durch Drücken der Taste 'v' aktiviert werden. Hinweis: Wenn gleichzeitig auch das USB-Debuggen aktiviert ist, dann wird der Bildschirm unleserlich weil USB-Daten und RC-Werte vermischt angezeigt werden. 3.4. Kanalnummern des RC EmpfängersWenn Ihre Fernsteuerung und der Empfänger unterschiedliche Kanalnummern verwendet, dann passen Sie die Nummern an: #define CHANNEL1 1 #define CHANNEL2 2 #define CHANNEL3 3 #define CHANNEL4 4 #define CHANNEL5 5 #define CHANNEL6 6 3.5. Kalibrierung oder nichtBeim RC Gamepad kann das Lenkrad und der Beschleunigungs-/Bremsentrigger kalibriert werden. Informationen zum Kalibrieren finden Sie unter 'Kalibrierung'. Das Kalibrierungsergebnis wird auf dem EEPROM des Teensy gespeichert. Alternativ zur Kalibrierung können Sie auch vordefinierte Werte verwenden. Mit 'PRINT_RC_VALUES' erhalten Sie die entsprechenen Werte für die Kanäle. Die Kalibrierung ist standardmäßig aktiviert. Um vordefinierte Werte zu verwenden, entfernen Sie die Zeile oder machen Sie ein Kommentar aus #define USE_CALIBRATE Hier sind ein paar Werte von meiner Fernsteuerung: // Steering wheel #define CHANNEL1_MIN 936 #define CHANNEL1_RELAXED 1479 #define CHANNEL1_MAX 1999 // Accelerate/Break #define CHANNEL2_MIN 1013 #define CHANNEL2_RELAXED 1475 #define CHANNEL2_MAX 1987 // Tristate channel #define CHANNEL4_MODE1 1000 #define CHANNEL4_MODE2 2000 // Twostate channels #define CHANNEL3_TIPPING 1200 #define CHANNEL5_TIPPING 1800 #define CHANNEL6_TIPPING 990 3.6. Taster HaltezeitDie Taster der Fernsteuerung agieren als Schalter. Siehe 'RC-Taster'. RC Gamepad emuliert wiederum Taster. Mit der Variable BUTTON_PRESS_TIME kann man die taster Haltezeit (wie lange der Taster gedrückt ist) in Millisekunden definieren. #define BUTTON_PRESS_TIME 400 3.7. Taster SpezialfunktionDa die Taster der Fernsteuerung als Schalter agieren, gibt es für die Tasteremulation von RC Gamepad eine Spezialfunktion um Taster länger als die definierte Haltezeit gedrückt zu halten. Mit FEATURE_KEEP_PRESSED wird der Taster so lange gehalten, bis der Beschleunigungstrigger wieder in die Mittelstellung geht oder eine Zeitspanne abgelaufen ist. #define FEATURE_KEEP_PRESSED 3.8. TerminalverbindungSie können ein serielles Terminal verwenden um Debug-Informationen und die Werte des RC-Senders (Fernsteuerung) anzeigen zu lassen. #define SERIAL_PORT Serial1 // RS232 serial pins RX1 and TX1. #define TERMINAL_REFRESH_MS 500 // Refresh rate for the terminal output. 500ms. 3.9. RC-EmpfängerSetup im Abschnitt: Remote control
Anzahl der Kanäle: #define RC_NUM_CHANNELS 6
Teensy Pins: rc_interrupt_pin[RC_NUM_CHANNELS] = {18, 19, 20, 21, 22, 23}; 4. Serieller TerminalSie können eine der RS232 Schnittstellen des Teensys verwenden, um eine Verbindung zu einem seriellen Terminal herzustellen. Ich verwende ein USB-Serialkabel COM-FOUR PL2303HX USB zu TTL RS232 COM. Schließen Sie RDX an TX1, TDX an RX1 und GND an GND an. Siehe Schaltplan. Output Device Node: /dev/ttyUSB0 Beispiel mit Minicom: minicom -b 115200 -D /dev/ttyUSB0 -o
Minikom verlassen: Drücken Sie STRG-A und dann 'q'. 5. Programm kompilieren5.1. Compiler installieren
Laden Sie Arduino IDE herunter und installieren Sie das Programm
Laden Sie Teensyduino herunter und installieren Sie das Programm in das Arduino IDE-Verzeichnis 5.2. Makefile konfigurierenÖffnen Sie das Makefile von RC Viewer und konfigurieren Sie folgende Variablen: • die Variable ARDUINO_HOME auf das Arduino IDE Installationsverzeichnis. • die Variable M_ARDUINO_VERSION auf die Arduino IDE Version. • die Variable M_TEENSYDUINO_VERSION auf die Teensyduino Version. • die Variable M_TEENSY_VERSION, falls Sie ein anderes Teensy 3 Modell verwenden als 3.2. 5.3. KompilierenFühren Sie 'make' aus um das Programm zu kompilieren. Das kompilierte Programm (rcviewer.hex) finden Sie im Verzeichnis 'bin'. 6. Teensy flashen6.1. ToolVerwenden Sie das Programm 'teensy_loader_cli' um das Teensy zu flashen. 6.2. Befehl zum FlashenDrücken Sie die weiße Taste des Teensy um in den Flash-Modus zu wechseln. Zum Flashen starten Sie: teensy_loader_cli -mmcu=mk20dx256 -v -w bin/rcviewer.hex Sie können auch das Skript 'flash' verwenden: ./flash 7. KalibrierungSie können das Lenkrad und den Beschleunigungs- / Bremsentrigger kalibrieren.
1) Schalten Sie die Fernsteuerung ein. Anstelle der Kalibrierung können Sie auch fest definierte Werte verwenden. Schreiben Sie im Programm rcgamepad.cpp '//' vor '#define USE_CALIBRATE' um die Kalibrierung zu deaktivieren. Tragen Sie Ihre Werte für das Lenkrad und den Beschleunigungs- / Bremstrigger bei den entsprechenden 'defines' ein. Sie erhalten die richtigen Werte, wenn Sie die serielle Verbindung zu einem Terminal aufbauen und '#define PRINT_RC_VALUES' im Programm verwenden. Sie können den Teensy auch mit dem Programm 'RC Viewer' für den Teensy 3.2 flashen lassen und die Werte anzeigen. 7.1. Fehlerbehebung - Kein KalibrierungsmodusWenn die Aktivierung des Kalibrierungsmodus nicht funktioniert, dann drehen Sie das Lenkrad auf das Maximum der anderen Seite. Wenn dies auch nicht funktioniert, überprüfen Sie ob USE_CALIBRATE im Programm definiert ist und kompilieren Sie das Programm neu, dann flashen Sie den Teensy. 8. RC Taster - Taster emulierenDie Taster der Fernsteuerung fungieren als Schalter. Wenn Sie zum Beispiel den Taster für Kanal 6 drücken, ändert sich die Impulsdauer (Impulsdauer> 1000 µs). Die Dauer wird beibehalten, wie bei einem Schalter, auch wenn der Taster losgelassen wurde. Wenn Sie erneut drücken, dann ändert sich wieder die Impulsdauer (Impulsdauer <1000 µs) und wird beibehalten. Dieses Verhalten ist nützlich für ferngesteuerte Fahrzeuge, aber für Spiele benötigen Sie Taster und keine Schalter. Die Two-State-Tastenfunktion emuliert einen Tastendruck mit der Dauer von 400 Millisekunden. 9. Konsolen ControllerDer Quellcode von RC Gamepad beinhaltet nicht die USB-Deskriptoren des Xbox 360 bzw. des PlayStation 3 Controllers. Wenn Sie die original Controller besitzen, dann können Sie die USB-Deskriptoren mit dem Programm 'getdescriptors' abrufen. Das Programm erstellt .h-Dateien. Diese Dateien müssen im Verzeichnis 'descriptors' gespeichert werden. Eine vorkompilierte Version des Programms finden Sie im Verzeichnis 'descriptors'. Starten Sie das Programm, wenn der/die original Controller am Computer angeschlossen sind. Der Quellcode von 'getdesciptors' ist ebenfalls verfügbar. Sie finden ihn im Verzeichnis 'getdescriptors_src'. Verwenden Sie 'make' um das Programm zu kompilieren. Die emulierten Konsolencontroller von RC Gamepad funktionieren nicht auf den entsprechenden Konsolen, da der erforderliche Sicherheitsmechanismus nicht implementiert ist. Sie können die emulierten Controller jedoch unter Linux, Windows, OSX und anderen Systemen verwenden. 10. Gamepad USB Vendor und Product IDRC Gamepad ist ein nicht kommerzielles Programm. Ich besitze keine USB Vendor ID, daher verwende ich die Teensy Vendor ID zu Demonstrationszwecken für das implementierte Gamepad. In descriptors/gamepad.h: #define GAMEPAD_VENDOR 0x16C0 // Teensy Vendor ID #define GAMEPAD_PRODUCT 0xFFF0 // No special number 11. TestenUnter Linux: jstest /dev/input/js0 12. ProblemeWenn Sie ein Spiel spielen und ein seltsames Verhalten feststellen, deaktivieren Sie die Terminalausgabe der RC-Werte. Schreiben Sie '//' vor '#define PRINT_RC_VALUES'. Wenn dies nicht hilft, deaktivieren Sie die Debug-Ausgabe. Setzen Sie '#define DEBUG_TYPE DEBUG_NONE'. 13. Debug-AusgabeZum Debuggen können Sie den Teensy mit einem Seriell zu USB Kabel verbinden und mit einem Terminal Programm (z.B. Minicom) ausgeben. Schaltplan: Teensy - RC Viewer/RC Gamepad Weitere Informationen: Teensy - USB/UART 14. Modus InformationVerschiedene Blinkmodi, wenn die Fernsteuerung beim Einschalten vom Teensy nicht mit Strom versorgt wird, und für den Modus 1 - 'Spielmodus', den Modus 2 - 'Menümodus' und den Modus 3 - 'alternativen Tastenmodus'. Using handicappedTodo Photos© 2024 by
Elmar Hanlhofer |