Wertebereich für Joysticks

Das Unterforum für Diskussionen rund um die Technik, Bedienung, Konfiguration usw. Das ist auch die erste Anlaufstelle für Bastler mit Fragen zu den Editoren.
Antworten
Nachricht
Autor
sebb
Beiträge: 12
Registriert: 01.12.2020 22:16:59

Wertebereich für Joysticks

#1 Beitrag von sebb »

Hallo,

ich stehe vor folgendem Problem: für ein Fahrpult möchte ich eine 1:1-Zuordnung zwischen den Zahlenwerten, die vom Joystick gesendet werden, und denen in Zusi erreichen. Der "Joystick" ist in diesem Fall ein Arduino, hier kann ich den Wertebereich der Achsen quasi beliebig (innerhalb der 16 bit-Grenzen) wählen. Zusi kennt für Joysticks nur einen Wertebereich, nämlich von -1000 bis 1000 (zumindest oberflächlich). Wenn ich diesen seitens des Arduino einstelle, passt die Zuordnung jedoch nicht: "0" entspricht noch "0", bei gesendetem Wert "1" zeigt Zusi bereits "2" an. Danach läuft es linear hoch, aber eben mit Versatz. Für mich sieht das nach einem Rundungsfehler aus, sprich, das tatsächliche Mapping in Zusi geht wohl nicht von -1000 bis 1000. Andere Werte, z.B. -1024 bis 1023, enthalten ebenfalls Versätze, dann eben an anderer Stelle.

Welchen Wertebereich muss ich also für den Joystick wählen, damit ich eine 1:1-Zuordnung zu Zusi erhalte? Klar, ich könnte auch die Übertragungsfunktionen so lang verbiegen, bis die Werte stimmen, aber eine mathematisch saubere Lösung wäre mir angesichts der ohnehin von Führerstand zu Führerstand verschiedenen Fahr- und Bremsstufen lieber.

Viele Grüße
Sebastian

Benutzeravatar
F. Schn.
Beiträge: 6630
Registriert: 24.10.2011 18:58:26

Re: Wertebereich für Joysticks

#2 Beitrag von F. Schn. »

Wie hast du den Versatz denn festgestellt? Über die Werteanzeige unter "Kalibrierung" oder über z.B. das Schaltwerk einer Lok?
Was zeigt Zusi an, wenn du mit dem Arduino den höchsten bzw. zweithöchsten Wert sendest? Zeigt Zusi diese Werte unter Kalibrierung dann auch korrekt an?
Wie heißen denn die Funktionen, die du im Arduino für den Wertebereich nutzt?
Diese Signatur möchte folgendes bekannter machen: ZusiWiki · ZusiSK: Streckenprojekte · YouTube: Objektbau für Zusi · euirc: Zusi-Chat

sebb
Beiträge: 12
Registriert: 01.12.2020 22:16:59

Re: Wertebereich für Joysticks

#3 Beitrag von sebb »

Hallo,

ich habe gerade festgestellt, dass entweder der Arduino bereits die Rundungsfehler erzeugt, oder Windows. Nehme also meine Unterstellungen gegenüber Zusi zurück :)
Lasse ich mir meine Variable "Fahrstufe" per seriellem Monitor anzeigen, passt alles. Das Programm FreePIE zeigt jedoch die gleichen Versätze an, wie Zusi.
Das Ganze sieht in etwa so aus (Soll-Variable | Ist-Joystickwert): (0 | 0), (1 | 2), (2 | 3), (3 | 4) ... (459 | 460), (460 | 460), (461 | 462) ...
Oberhalb von 480 scheint die Zuordnung zu passen, der Maximalwert 1000 passt auch. Im negativen Wertebereich treten keine Versätze auf.

Als Joystick-Bibliothek nutze ich diese hier: ArudinoJoystickLibrary, den Range setze ich entsprechend mit

Code: Alles auswählen

Joystick.setXAxisRange(int16_t minimum, int16_t maximum)
Im oben genannten Fall mit -1000 als Minimum und 1000 als Maximum.

Eine Ergänzung noch: es findet hier wohl 2 mal Mapping statt, einmal vom gewählten Wertebereich am Arudino auf den Standard-Wertebereich für Joysticks (16 bit Integer, -32767...32767), und dann wiederum auf Windows von diesem Wertebereich zu -1000 ... 1000. Selbst wenn ich also am Arduino -1000 ... 1000 als Wertebereich vorgebe, wird dazwischen noch eine ganze Menge rumgerechnet, was die Rundungsfehler erklärt.

Workaround meinerseits: Ein Wertebereich von -100 bis 100 am Arduino. Statt 10 - 20 - 30... bekommt man dann zwar 11 - 21 - 31..., auf Simulatorfunktionen haben diese Rundungsfehler nach einem ersten Test keine Auswirkungen. Es tritt also bei jedem Schaltvorgang die entsprechende Änderung ein und es werden keine Fahrstufen übersprungen.

Antworten