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! 

05/03/2024 - This forum is read-only

The community support for MobiFlight has moved exclusively over to our Discord server. Register for free and enjoy more interactive functions like image and video upload, voice chat. More than 7,000 registered users around the world make it a great experience!

See you on our MobiFlight Community Discord server.

A HUGE Thank You to everyone who participated in the forum, especially obviously to Pizman and Stephan who did an outstanding job over so many years providing an incredible service to the MobiFlight community.

The forum is still providing a lot of good content, hence we keep this information accessible.

icon
Avatar
Pedro1961
From: EDHN, Germany
Posts: 24
Hallo SimFreunde,

ich habe da ein kleines Denkproblem... Ich möchte die Werte für den Autopiloten auf einem LCD-Display anzeigen lassen und mit Encoder einstellen.
Hier mein Problem:

Encoder: Autopilot Heading 0x07CC funktioniert mit on left $-182 on right $+182, im Flieger dreht sich die Nadel auch richtig...
Aber wenn ich die Werte jetzt auf dem Display anzeigen lasse, unter 0x07CC dann bekomme ich wenn ich nach links drehe negative werte angezeigt oder auch größere Werte als 360°...
Bei der Anzeige verwende ich Transform $*360/65536+1... Wie muß ich die If-Bedingungen verschachteln so das nur werte zwischen 0 und 360 Grad angezeigt werden... stehe echt auf dem Schlauch und erbitte einen Schubs in die richtige Richtung.


Liebe Grüße
Peter
Ich will nur spielen!
2019-05-15 16:18
Avatar
StephanHo
From: EDDG, Germany
Posts: 1867
Supporter
versuch mal:

if($>360,deine 1. Berechnung,if($<0,deine 2. Berechnung,$*360/65536+1..))

liest sich so: wenn der Wert größer als 360 ist, führe deine 1. Berechnung aus, wenn der Wert kleine 0 ist, deine 2. Berechnung, sonst $*360/65536+1..
Grüße,
Stephan (Time: UTC+2)
2019-05-15 20:58
Avatar
Pedro1961
From: EDHN, Germany
Posts: 24
Hallo Stephan,
vielen Dank für die Nachhilfe in verschachtelten If-Bedingungen... hat auch soweit geklappt, nur habe ich das Problem, wenn ich das zweite mal über Nord drehe, klappt meine Bedingung nicht mehr...
Hier meine Formel: if($>65538,$/182-360,if($<0,$/182+1,$/182)
Ich müßte beim zweiten mal nicht 360 sondern 720 abziehen um wieder auf 0 zu kommen... da fehlt es mir am entsprechenden logischen Denkvermögen:blush:
Ich will nur spielen!
2019-05-16 10:31
Avatar
StephanHo
From: EDDG, Germany
Posts: 1867
Supporter
Hi Peter,

wenn dies

iconCode:
 if($>65538,$/182-360,if($<0,$/182+1,$/182)


deine Formel ist, hat sie Fehler:

1. 65538 - dieser Wert kann nie erreicht werden, denn die möglichen Werte gehen von 0 bis 65536 (=216)
2. die 2. Klammer zu ( ) ) fehlt - müßte eigentlich einen fehler geben
3. der Wert kann nie größer als 65536 werden, insofern macht es keinen Sinn, ihn abzuprüfen
4. der Wert kann auch nicht kleiner als 0 werden, weil bei FSUIPC nur von 0 bis 65536 ausgegeben wird.

Daher greift bei dir auch nur die 1. IF-Bedingung.

Woran liegt's?
Der Kompaßkreis wird in 360 Grade unterteilt. Da in FSUIPC dieser Wert über Werte von 0 bis 65536 dargestellt wird, sind die 65536 also die 360 Grad und 1 Grad somit 65536/360=182.0444444444.
Der Teil nach dem Komma ist vernachlässigbar und macht im max. 16 aus (65520 statt 65536)

Daher würde ich die Formel so aufbauen:

iconCode:
if($/182>359,$/182-360,if($/182<1,$/182+359,$/182))


denn 360 ist ja = 0, zwar ein von MF darstellbarer Wert, aber 360 und 0 sind so gleichzeitig nicht darstellbar, somit sollte 1 Wert elemeniert werden, hier 360.
Grüße,
Stephan (Time: UTC+2)
2019-05-16 18:22
Avatar
Pedro1961
From: EDHN, Germany
Posts: 24
Vielen Dank Stephan,
werde es morgen ausprobieren und dann berichten...

Gruß Peter
Ich will nur spielen!
2019-05-16 19:19
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Hallo Freunde der Nacht.

Der Grundgedanke ist zwar richtig.... Dennoch gilt wie immer im Leben.... Man sollte den einfachsten Weg gehen damit einen am Ende die Füße nicht weh tun !

Input:
Hier ist die Frage schlicht ob das System ( Je nach AddOn und Offset) einen "Swap" kennt.
Grundsätzlich haben wir.... "Autopilot heading value, as degrees*65536/360" ...... 65536/360 = rund 182 ..... Also 1 Grad sind "etwa" 182 Value.
$+182 on Right und $-182 on LEft sollte passen SOFERN das system den Swap macht.
Sprich wenn du bei 359 Grad nach rechts drehst dann würdest du ja FSUIPC sagen das es den Wert auf "mehr" als 65536 stellen soll was nicht möglich ist.
Selbes bei 0 Grad. Hier würde ein Linksdrehen ja den Wert negativ setzen was ebenfalls nicht geht.

Meistens erkennt das das System intern und sagt "wenn Wert nach dem Input über 65536 dann setzte 0 .... Wenn Wert nach den Input unter 0 dann setzte 65536 .
Sollte das nicht klappen (testen) dann muss man dies in einer IF Funktion bei den Inputs machen
Hierfür muss man dann schlicht rausfinden welchen Wert FSUIPC bei 1 Grad, 0 GHrad und 359 Grad hat und man kann dann eine IF/ELSE machen wie bei On Right " Wenn $ kleiner als der Wert von 359 ist dann $+182 ... Wenn nicht (Also grad 359) dann setzte direkt den Wert der 0 Grad entspricht)

Da du ja meintest es geht bereits lassen wir das jetzt.


*********************
Output:
Hier denke ich hast du schlicht ein Signet Problem. Dein Raw Wert ist richtig Nur liest Mobiflight ihn signet und zeigt -180 bis + 179 an Anstatt 0-359

Euer Fehler.... Ihr packt alles in eine Line obwohl das gar nicht sein muss,

Step 1: Den Wert in Grad umwandeln.
Transform aktivieren und $/182 eingeben.

Folgerlich ist "danach" bereits der Wert die Gradzahl! Also auch schon im Compare Feld.
Hast du jetzt das Problem das der Wert Negativ ist über 180 Grad dann sagst du im Compare
Wenn Wert kleiner 0 dann setzte $+360 ( Das sonst feld kannst leer lassen oder du schreibst $ hin. Bleibt sich gleich)
Good Luck !
2019-05-17 11:31
Avatar
Pedro1961
From: EDHN, Germany
Posts: 24
Hallo pizman,
vielen Dank für diese einfache Erklärung... jetzt stellt sich das Probleme mit dem signet ein... bei 180 ist in beiden Richtungen schluß...aber das ist eine Tatsache, mit der ich Leben kann (muss:lol: ).
Ich will nur spielen!
2019-05-17 13:30
Avatar
pizman82
Moderator
From: ETSI, Germany
Posts: 6010
Supporter
Damit musst du nicht leben..... Du musst nur die richtigen Funktionen verwenden.

Wo ist das Problem.... Beim Encoder ?? oder was meinst du ?
Auch bei nen Input kann man eine IF ELSE machen falls erforderlich.

Grundsätzlich gilt:

Finde als erstes raus WIE der Offset arbeitet....
Lese dazu den betreffenden Wert aus ( Korrekter Datentyp, Offset und Size)
Verändere erstmal im Virtuellen Cockpit den Wert mit dem dortigen Regler....
Du musst verstehen WIE es arbeitet... Also welcher Value bei 0,1,2,3,4 usw angezeigt wird bzw ob eine Logik herscht wie 1 Grad ist "immer" 182 Value

Mit diesen Daten ist es dann IMMER möglich einen Input bzw einen Output zu bauen der 100% funktioniert. Theoretisch kann man mit Mobiflight auch eine 10 fache verschachtelung in den Funktionen machen. Da geht so ziemlich alles !
Good Luck !
2019-05-17 14:46
icon