Arduino Leonardo
Joystick Prototyp

Vorbereitung

Wir haben in der Recherche alles notwendigen Informationen zusammengetragen und uns mit der Hardware beschäftigt. Wie bereits mehrfach genannt, haben wir uns für einen Arduino Leonardo entschieden. Hinzukommt die weiteres Equipment, die für eine erfolgreiche Umsetzung aus unserer Sicht notwendig ist:

  • Drehpotentiometer, 10 kOhm
  • Drucktaster, 2 polig
  • Arduino Leonardo, ATmega 32u4
  • Diverse Kabel und Verbindungen…

Eine vollständige Liste könnt ihr über die geteilte Liste von Reichelt.de einsehen, diese wird im laufe des Prozesses erweitert und aktualisiert. Ganz wichtig, es sind keine Links für Affiliate Programme oder dergleichen! Es geht uns lediglich darum Euch aufzuzeigen, welche Hardware wir ausgewählt haben, mit der unser Projekt zum Erfolg geworden ist! (Hoffentlich 🙂 )

Einkaufsliste für Arduino Segelflug-Simulator

Installation und Coding (V1)

Damit wir den Code für den Arduino erstellen können benötigen wir die Entwicklungsumgebung. Diese kann man in der aktuellen Version von www.arduino.cc (Arduino IDE 1.8.9) herunterladen.

Nun muss die Librarie für den Joystick-Code von Matthew hinterlegen. Hierzu die aktuelle Version (2.0.5) von GitHub herunterladen und Entpacken. Im entdeckten Ordner findet man eine Datei deploy.bat – Diese kopiert das Librarie-Verzeichnis automatisch in das korrekte Verzeichnis.

Screenshot: Wenn das Libraries-Verzeichnis fehlt!

Damit nun der erste Beispiel Code übertragen werden kann, muss in der Arduino IDE Software noch das richtige Board ausgewählt werden. Dazu der Menüleiste unter Werkzeuge schauen. Hier muss einerseits das Board, unter gleich lautendem Namen im Kontextmenü ausgewählt werden – „Arduino Leonardo“ und unter Port die Serielle Schnittstelle ausgewählt werden um eine Verbindung herstellen zu können. Sollte es hier zu Problemen kommen einfach das WWW befragen, dort findet man ausreichend Literatur zum Arduino und der Benutzung der Software!

Vom Bespiel-Code zum Teilergebnis (V1)

Die Librarie von Matthew bringt Besipiel-Code mit, diesen findet ihr indem ihr unter Arduino IDE der Menüleiste Datei / Beispiele / Joystick schaut. Uns hat es bei der Erstellung sehr geholfen und nicht nur der Code es FlightSimulators den wir primär verfolgen. Durch die Unterstützung meines Kollegen Dietmars, konnten wir bereits nach wenigen Stunden „programmieren“, vorzeigbare Ergebnisse entwickeln. Mit einer weiteren Programmier-Stunde haben wir dann den Code soweit erstellt, dass wir einen ersten Erfolgreichen Probelauf starten konnten. Mit Erfolg!

Programmcode Version 1
#include "Joystick.h"

// Create Joystick
Joystick_ Joystick;

// Set to true to test "Auto Send" mode or false to test "Manual Send" mode.
const bool testAutoSendMode = false;

const unsigned long gcCycleDelta = 1000;
const unsigned long gcAnalogDelta = 25;
const unsigned long gcButtonDelta = 500;
unsigned long gNextTime = 0;
unsigned int gCurrentStep = 0;

int xAxis = 0;
int yAxis =0;

int rzAxis = 0;

int Throttle = 0;
int RudderRange = 0;

boolean taster1;
boolean taster2;
boolean taster3;
boolean taster4;
boolean taster5;
boolean taster6;

void setup() {
  
  Serial.begin(9600);
  // Set Range Values
  
  Joystick.setXAxisRange(0, 1023);
  Joystick.setYAxisRange(0, 1023);
  Joystick.setRzAxisRange(0, 1023);
  Joystick.setThrottleRange(0, 1023);
  Joystick.setRudderRange(0, 1023);
  
  if (testAutoSendMode)
  {
    Joystick.begin();
  }
  else
  {
    Joystick.begin(false);
  }
  
  pinMode(13, OUTPUT);
  pinMode(12, INPUT_PULLUP);
  pinMode(11, INPUT_PULLUP);
  pinMode(10, INPUT_PULLUP);
  pinMode(9, INPUT_PULLUP);
  pinMode(8, INPUT_PULLUP);
  pinMode(7, INPUT_PULLUP);
}

void loop() {

  xAxis = analogRead(A0);
  yAxis = analogRead(A1);
  rzAxis = analogRead(A2);
  Throttle = analogRead(A3);
  RudderRange = analogRead(A4);
  
  taster1=digitalRead(12);
  taster2=digitalRead(11);
  taster3=digitalRead(10);
  taster4=digitalRead(9);
  taster5=digitalRead(8);
  taster6=digitalRead(7);
 
  Joystick.setXAxis(xAxis);
  Joystick.setYAxis(yAxis);
  Joystick.setRzAxis(rzAxis);
  Joystick.setThrottle(Throttle);
  Joystick.setRudder(RudderRange);

  if (taster1) {
    Joystick.releaseButton(0);
  } else {
    Joystick.pressButton(0);
  }
  if (taster2) {
    Joystick.releaseButton(1);
  } else {
    Joystick.pressButton(1);
  }
  if (taster3) {
    Joystick.releaseButton(2);
  } else {
    Joystick.pressButton(2);
  }
  if (taster4) {
    Joystick.releaseButton(3);
  } else {
    Joystick.pressButton(3);
  }
  if (taster5) {
    Joystick.releaseButton(4);
  } else {
    Joystick.pressButton(4);
  }
  if (taster6) {
    Joystick.releaseButton(5);
  } else {
    Joystick.pressButton(5);
  }

  Joystick.sendState();
  delay(0);
}

Probleme und Lösungen bei der Verwendung

Der Programmcode lies sich ohne Probleme auf den Arduino überspielen und führte zum gewünschten Ergebnis. In den Windows Einstellungen, unter Gamecontroller, wurde der Arduino Joystick einwandfrei erkannt. Sobald ein Taster oder ein Potentiometer seinen Zustand verändert hat, wurde dies sofort am Computer angezeigt. Damit wäre der Grundstein für den eigenen Joystick gelegt.

Bei den nächsten Versuchen, den Joystick mit unseren Flugsimulations-Software zu verwenden, sind wir jedoch auf Probleme gestoßen. Der für uns sehr wichtige „Condor“ Segelflugsimulator erkennt den Arduino Joystick leider gar nicht. Wir haben uns speziell hierzu in diversen Foren eingelesen, Handbücher und Tipps&Tricks gelesen, sowie die Softwarehersteller kontaktiert – Leider ohne Erfolg! Jedoch wurden wir in einem Unterforum vom „Condor“ Segelflugsimulator auf das Thema virtuelle Joysticks aufmerksam. Diese werden verwendet, wenn alte Joysticks mit modernen Betriebssystemen nicht mehr 100% kompatibel sind. Der virtuelle Joystick erkennt viele ältere Eingabegeräte am PC und „übersetzt“ die Werte für den aktuellen PC verständlich (Kurzfassung 😉 ). Darüberhinaus haben wir noch eine aktuelle Webseite ausfindig gemacht, die es ermöglicht via HTML5 Online die Werte des Joysticks auszulesen. Wir fanden dies sehr hilfreich, denn man sieht nicht nur die Ausgabewerte sondern auch alle möglichen Taster und Achsen. Für uns: Sehr hilfreich!

Diesen Ansatz haben wir verfolgt und die Software vJoystick für den virtuellen Joystick installiert. Damit wir nun unseren Arduino Joystick mit dem vJoystick verbinden können benötigen wir eine neue Zuordnung unserer Eingabewerte. Hierzu gab es eine Software mit dem Titel „Universal Joystick Remapper“ jedoch wurde hier der Support eingestellt. Mit ein wenig Recherche haben wir über Github eine andere Software gefunden, dessen Entwickler ein ähnliches Problem hatte wie wir – Glück muss man haben! Mit der Github Software Joystick Gremlin können wir nun die Verbindung unserer Eingabewerte vom Arduino Joystick remappen und auf den vJoystick legen!

Mit dieser Lösung haben wir unser Ziel erreicht! Unser Arduino Joystick wird mittels der Zwischensoftware am Windows PC erkannt und kann auch mit unserem favorisierten Simulationssoftware verwendet werden. Wir werden uns dennoch in den nächsten Wochen weiter mit dem Code verwenden, denn eine Verwendung an einem Computer sollte unserer Einschätzung nach auch ohne Remapper möglich sein. Ziel wird sein, dass der Arduino Joystick an einem Windows und Mac Computer via Plug&Play erkannt und einsatzbereit ist.

Quellen und Verweise

Anleitungen für den Anfang und zum Testen:

Verwendete Videos, um Kompatibilität Arduino (V1) und Condor herzustellen:

Verwendete Software, über die Arduino (V1) Library hinaus:
Mit der folgenden Software Erweiterung ist die Nutzung des Arduino mit dem individualisiertem Quellcode umsetzbar und funktioniert.

Es gab während der Umsetzung einige Eckpunkte, die wir über die Community versucht haben zu lösen. Hier kommen die Links zu den Threads die wir geöffnet haben. Direkte Anfragen bei Hersteller, wurden nicht beantwortet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.