MobiFlight Community Support

Welcome to the forum for MobiFlight! Feel free to reach out to the community in case you have questions, issues or just want to share great ideas or details about your latest home cockpit project.

You like MobiFlight? Donate via PayPal and support the MobiFlight development. Thanks! 

icon
Avatar
DannyT
Posts: 35
Hallo,

Da ich grade meine A320 Panels fertigstelle,
muss ich mir nun Gedanken über das Interfacen machen.
Zum Einsatz kommen
Arcaze
Arduino Mega mit Mobiflight.

Nun wäre es aber schön, wenn ich jedes Panel mit einer eigenen Interface Karte bestücken könnte. Dann bliebe der Kabelsalat aus und die Übersicht erhalten.
Nun wäre dafür aber eine Arcaze zu teuer.
Das Arduino Mega kann aber keine Joystick Buttons direkt interpretieren. Jeehell bietet da ja die tolle Funktion, per Tastendruck eine Funktion zuzuweisen.

Somit kam ich auf den Arduino Leonardo. Dieser lässt sich sehr einfach als Joystick konfigurieren.
Dann habe ich die Wahl:
Entweder 20 Buttons
Oder 17 Buttons und 3 Potentiomer.
Oder, oder, oder....
In China kostet die Karte 3.99€

Damit kostet mich 1 Pin 0.14€
Arcsze: ca 1.00€

Somit lässt sich jedes Panel kostengünstig mit je 2 Karten (Leonardo und Mega) ausstatten und per USB an den Rechner anschließen.
Wer mag kann dann für die LEDs und Drehgeber ein Mega und für Tasten (Drehschalter) ein Leonardo pro Panel verbauen.

Leider habe ich da noch Probleme, da ich mich mit der Programmiersprache von Arduino nicht so gut auskenne.

Bislang konnte ich es umsetzen pro Karte 20 Pins als Buttons zu programmieren.

Wäre schön, wenn hier jemand helfen könnte, Potis einzubinden?
Also dass man die Wahl hat zb. 17 Buttons und 3 Potis, oder 19 Buttons und 1 Poti.

Gruß
Danny
2018-01-01 17:52
Avatar
aeromax
Posts: 147
Supporter
Grüß Dich,

habe das Board ebenfalls, dennoch noch nicht am System! Da jedoch in absehbarer Zeit ein kompletter Neuaufbau erfolgt, werde ich dieses auf jeden Fall einsetzen.

Werde dann nochmals hier rein schauen, sofern bis dahin noch keiner hierzu etwas schreiben konnte, Infos mitteilen.

Wird schon!

Gruß
Max
Life is Good When You Find What You are Looking For!
2018-01-01 20:35
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 3746
Supporter
Hi ihr zwei !

Kurz zur aktuellen Situation.... Ich weis das Sebastian auf der ToDo Liste die unterstützung der Pottis (Analog Inputs) hat.... Denke aber das wird noch dauern.... Und auch kann ich mir vorstellen das diese dann "nicht" wie ein Joystick in FSUIPC oder FSX eingebunden/erkannt werden sondern mehr als Dateninput für Mobiflight um DORT in MF dann verknüpft zu werden.... Somit wird DAS vermutlich nicht die Lösung für euch werden.

****
Lösungen:

Die wichtigste Frage ist.... Was braucht ihr ?
Sollte es nur für den FSX/P3D sein oder muss es auch mit Xplane gehen? Und reichen euch 288 Buttons ?
Falls ja.... Es ist möglich per Mobiflight 288 Virtuelle Joystickbuttons zu benutzen die aber nur in FSUIPC gehen also im FSX und P3D.

Wenn ihr Potis braucht dann geht momentan kein Weg an nen HID Controller vorbei.... Allerdings wenns nur die paar Achsen sind und ihr mit den "virtuellen Buttons" auskommt dann braucht ihr auf diese Controller ja keine Tasten legen.

....
Guckt euch später mal diesen Topic an..... ab der Nachricht von Bonanza.... https://www.mobiflight.com/forum/message/6110.html

Zusammengefasst....
Vielleicht kann euch hier auch jemand helfen (Bonanza z.b.) aber für fragen zu dem Code solltet ihr euch an die Entwicklerseite bzw die Foren der Leute wenden die diese Arduino Library geschrieben haben.....

Ich persönlich suche auch noch nach einer guten Alternative.... Weis noch nicht genau ob ich so eine Lösung nur für die "Problemfälle" nutze oder allgemein.
LEIDER geht besagte Software nicht auf einen Mega..... Der Hätte ja 52 Pins... Will man auf dem Leonardo/Micro einen 32 Button Stick, dann muss man eine Matrix basteln was wieder viel Arbeit ist.
Sollte es aber dafür mal ne "gute" Lösung geben plane ich eigentlich die INPUTS komplett aus Mobiflight rauszunehmen.... Und ALLES über Joystickinputs zu machen.
Good Luck !
2018-01-02 11:26
Avatar
DannyT
Posts: 35
Hallo Pizmann,
Danke für deine Rückinfo!

Also ich habe für den Leonardo folgende Library verwendet: https://mheironimus.blogspot.de/2016/11/arduino-joystick-library-version-20.html?m=1

Somit war ich in der Lage den Leonardo als HID Joystick zu konfigurieren.
Dieser hat 6 Analoge und 14 digitale Eingänge.
Ich konnte damit 20 Joystick Buttons definieren.
Für Jeehell perfekt, da ich für jeden Joystick Button eine Funktion zuweisen kann.
Nun fehlt mir aber noch die Möglichkeit auf den analogen Pins Potis einzubinden.
Also anstatt 20 Buttons zb. 17 Buttons und 3 Potis zu realisieren.
Bringt es was, hier den Sketch zu posten?
2018-01-02 12:26
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 3746
Supporter
Nope.

Du kannst auf Antwort von Bonanza warten ( Der arbeitet mit der Technik und genau dieser Lib) ...
Oder du liest dir die GithubSeite von Herrn Heronimus durch bzw googlest nach Foren und Infos.

Wie gesagt da dies nicht Mobiflight betrifft sondern eben besagten Arduino Sketch bist du hier "etwas" falsch !
Good Luck !
2018-01-02 18:36
Avatar
DannyT
Posts: 35
Hallo Pizmann,

Also jetzt habe ich mal ein paar Stunden investiert.
Das Sketch von Bonanza funktioniert leider nicht. Vielleicht liegt es am falschen (älteren) Library...
Ich verwende die aktuelle Version 2.0.4! (Link oben)
Gerne würde ich den funktionierenden Code bzw. Sketch (Tutorial) hier veröffentlichen.
Dafür brauche ich aber ein ok.

Mit dem Code / Sketch hat man folgende Möglichkeiten bei einem Arduino Leonardo/ Micro:
20 Joystick Buttons oder
14 Buttons + 6 Potentiometer
Insgesamt hat man 20 Pins zur Verfügung davon maximal 6 Potis .

Eine Matrix mit 32 Buttons macht wenig Sinn, denn ein Leonardo Board kostet ca. 4€ incl. USB Kabel.
D.h.
20 Buttons 4€,
40 Buttons 8€,
60 Buttons 12€ !
Etc....

In Kombination mit Mobiflight/ Mega - Unschlagbar!
Gruß
Danny
[Last edited by DannyT, 2018-01-03 10:55]
2018-01-03 10:45
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 3746
Supporter
iconDannyT:


Gerne würde ich den funktionierenden Code bzw. Sketch (Tutorial) hier veröffentlichen.
Dafür brauche ich aber ein ok.



Prinzipiell ist ja der ganze Arduino Sketch Part "open source" . Wenn dann brauchst du das OK von den leuten die den Sketch gemacht haben bzw von dem Typen der die Lib gemacht hat..... Aber ich denke wenn man einen Kurzen Verweis (Link) setzt sollte es Urheberrechtlich kein Problem geben..... Und Löschen kann es Sebastian ja immer noch wenns nicht passt.

Zum Thema selbst....

Der verlinkte Script von Bonanza ist eher was spezielles da er daran arbeitet "Optische Encoder" per Programm in Joystickbuttons umzuwandeln.... Also das man am Encoder nach Links dreht und bei jeder Rastung einmal Joystickbutten XY gedrückt wird. Siehe bitte diesen sketch von ihm mehr als Beispiel und nicht als Endprodukt !

Zu deiner Aussage wegen der Matrix .... Hier ist das Problem am Ende das die Anzahl der Gamecontroller limmitiert ist.
Bin mir nicht sicher aber ich glaub FSUIPC erlaubt pro PC nur 12 oder 16 Controller. (Inclusive der Yoke, Throttle, Rudder, Brakes, Flaps usw)
Folge: Mit 20 Tasten kannst du nicht das ganze Cockpit belegen.
Wenn ich es richtig verstehe kann man aber auf einen Client PC (Über WideClient - Payware von Pete Dowson) auch wieder 12/16 Joysticks anstöpseln und das Limit liegt dann bei 96 Joysticks in FSUIPC insgesammt ( oder 128).

Fazit: Ich wäre am glücklichsten wenn es eine Lösung für ein MEGA geben würde ( Da bereits 52 Digital und 16 Analogpins vorhanden sind).
Aber untern Strich.... Es wäre auch Möglich mit Client PC´s das ganze rein mit Micro/Leonardo zu machen !
Good Luck !
2018-01-03 15:49
Avatar
albeagle
From: Kosovo
Posts: 118
Es gibt eine free Software die heisst mmjoy2. Ich wollte es in meinem Radio integrieren, ich habe es aber villeicht für später gelasen. Leo Bodnar karte ist auf das hier basiert.
@Pizman es wird als joystick vom System erkannt, dass heisst es muss nicht über FSUIPC laufen das macht das ganze super interesant und günstig.

Firmware has support for up to 128 buttons + 10 axis inputs (2 axis reserved for mouse emulation, Windows Game Controllers see up to 8 axis), number of buttons use depend on Arduino board number of pins available.
Possibility to use for joystick: 128 buttons + 2 HAT's (8 buttons) + 8 axis
Possibility to use for mouse emulation: 3 buttons + 2 axis
Possibility to use for keyboard emulation: 12 buttons (or 15 without "mouse")

Und hier ist der link mit sehr schöne sachen :w00t: :thumbup: :thumbup:

http://simhq.com/forum/ubbthreads.php/topics/3899105/1

AlbEagle
[Last edited by albeagle, 2018-01-03 20:33]
Regards
AlbEagle

http://flyingforfun.weebly.com/cessna-172-cockpit.html
2018-01-03 20:16
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 3746
Supporter
Hi Albeagle.

Ich glaube du hast genau das gefunden was ich in einer privaten Mail kürzlich Bonanza vorgechlagen/Angefragt habe.
Hab mal die erste Seite überflogen und du könntest mir einen Haufen Lesearbeit und testen ersparen wenn du mir eine Frage beantwortest......

Ich suche ein Programm das ähnlich wie Mobiflight für mich den Script/sketch generiert und das in einer grafischen Oberfläche....
Also ich stecke ein leeres Arduino Micro an den PC und starte ein Programm.... Wie Mobiflight erkennt er das Board und flashed die Firmware für das Joysticksystem drauf so das es ein "Joystickcontroller" wird..... Und danach habe ich auch wieder ähnlich wie in Mobiflight "Settings/Devices/Mobiboard" die Möglichkeit in einer grafischen Oberfläche zu sagen WAS ich will und auf welchen Pins ich das anschliesen will..... Und die Software erstellt am Ende SELBER einen script und schreibt ihn auf den Arduino.
Frage: Ist das was du gelinkt hast GENAU DAS was ich suche ?
EDIT: Frage2 : Weist du ob diese Software auch Encoder bzw Optische Encoder unterstützt ?

Danke !

*****
iconalbeagle:

.
@Pizman es wird als joystick vom System erkannt, dass heisst es muss nicht über FSUIPC laufen das macht das ganze super interesant und günstig.



Ist mir klar.... Ich wollte nur darauf anspielen das man speziell bei Profisoftware wie Magenta etc auf dem FSX/P3D in der Regel über FSUIPC arbeitet und NICHT über die Belegung im FSX. Speziell wenns um Macros und Vorbedingungen geht kommt man um FSUIPC nicht rum.
Wer natürlich Standardflugzeuge verwendet der kann auch die Standard Tastenbelegung des FSX nutzen.... Aber wer macht das schon ?

Aber EGAL.... Wer ein Proficockpit baut muss zwingend mehrere PC´s iom Netzwerk verwenden..... Somit hat er auch 30-40 oder Mehr Joystickplätze und es sollte gehen (auch ohne Matrix)
Good Luck !
2018-01-04 12:32
Avatar
DannyT
Posts: 35
Hallo,

wie angekündigt nachfolgend how to:

erst unter folgenden Link das Library 2.0.5 herunterladen:


https://github.com/MHeironimus/ArduinoJoystickLibrary


und entsprechend installieren. Also das Joystick Library ins Arduino Libraries einfügen und die deploy.bat ausführen.

Hier der Sketch mit 20 buttons:

#include <Joystick.h>

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
24, 0, // Button Count, Hat Switch Count
false, false, false, // X and Y, but no Z Axis
false, false, false, // No Rx, Ry, or Rz
false, false, // No rudder or throttle
false, false, false); // No accelerator, brake, or steering

void setup() {
// Initialize Button Pins
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
pinMode(15, INPUT_PULLUP);
pinMode(16, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);

// Initialize Joystick Library
Joystick.begin();
}
const int pinToButtonMap = 0;

// Last state of the button
int lastButtonState[24] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void loop() {
for (int index = 0; index < 24; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}
delay(50);
}

und hier Sketch mit 14 Buttons und 6 Potentiometern:

#include "Joystick.h"

Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID,JOYSTICK_TYPE_GAMEPAD,
14, 0, // Button Count, Hat Switch Count
false, false, true, // X and Y, but no Z Axis
true, true, true, // Rx, Ry, or Rz
false, true, // rudder or throttle
true, false, false); // accelerator, brake, or steering

// declare variables
int axe1Value;
int axe2Value;
int axe3Value;
int axe4Value;
int axe5Value;
int axe6Value;


// init joystick libary
void setup() {
// Initialize Button Pins
pinMode(0, INPUT_PULLUP);
pinMode(1, INPUT_PULLUP);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
pinMode(11, INPUT_PULLUP);
pinMode(12, INPUT_PULLUP);
pinMode(13, INPUT_PULLUP);
pinMode(A0, INPUT_PULLUP);
pinMode(A1, INPUT_PULLUP);
pinMode(A2, INPUT_PULLUP);
pinMode(A3, INPUT_PULLUP);
pinMode(A4, INPUT_PULLUP);
pinMode(A5, INPUT_PULLUP);

// Initialize Joystick Library
Joystick.begin();
}

// Constant that maps the phyical pin to the joystick button.
const int pinToButtonMap = 0;

// Last state of the button
int lastButtonState[14] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void loop() {
// Axe 1
axe1Value = analogRead(A0);
Joystick.setThrottle(axe1Value);
delay(1);

// Axe 2
axe2Value = analogRead(A1);
Joystick.setZAxis(axe2Value);
delay(1);

// Axe 3
axe3Value = analogRead(A2);
Joystick.setRxAxis(axe3Value);
delay(1);

// Axe 4
axe4Value = analogRead(A3);
Joystick.setRyAxis(axe4Value);
delay(1);

// Axe 5
axe5Value = analogRead(A4);
Joystick.setRzAxis(axe5Value);
delay(1);

// Axe 6
axe6Value = analogRead(A5);
Joystick.setAccelerator(axe6Value);
delay(1);


// Read pin values
for (int index = 0; index < 14; index++)
{
int currentButtonState = !digitalRead(index + pinToButtonMap);
if (currentButtonState != lastButtonState[index])
{
Joystick.setButton(index, currentButtonState);
lastButtonState[index] = currentButtonState;
}
}

delay(50);
}


Gruß
Danny
2018-01-06 17:16
icon