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
schillermetall
Posts: 22
Hello,

Ich habe mir in meinem Flugsimulator https://www.youtube.com/watch?v=VM5VOJ5iado&t=36s eine Analog-Uhr eingebaut.
Sie funktioniert soweit ganz gut. Mit dem Stundenzeiger habe ich aber ein Problem. Für den offset 0x0238 werden die Stunden in vollen Werten von 0-24 ausgegeben. Das heißt das der Zeiger immer nur auf die vollen Stunden springt. Gibt es eine Lösung, das der Stundenzeiger auch die Zwischenwerte anzeigt?

I installed an analog clock in my flight simulator https://www.youtube.com/watch?v=VM5VOJ5iado&t=36s
It works quite well so far. But I have a problem with the hour hand. For the offset 0x0238, the hours are output in full values from 0-24. This means that the hand only jumps to the full hours. Is there a solution that the hour hand also shows the intermediate values?

Thanks
Roland
2021-08-03 21:21
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Hi Roland,

ja klar geht das.

Da nimmst du dir den Minutenzeiger zu Hilfe. Zwischen z.B. 2 und 3 Uhr hast du ja 5 Minutenabschnitte, also 10, 11, 12, 13, 14, und 15.

Damit hättest du also 5 weitere Positionen, mit denen du deinen Stundenzeiger ansteuern kannst.

Ist der große Zeiger auf der 12 und der kleine auf der 2, fängst du an.

Teilst du eine Stunde in 5 Abschnitte, bekommst du 12 Minuten. Du mußt also dafür sorgen, daß der Stundenzeiger innerhalb dieser Stunde 5 mal weiterrückt und zwar immer dann, wenn 12 Minuten rum sind, also um 12 nach, 24 nach, 36 nach, 48 nach und um 60 bzw. 00.

Da ein Kreis bekanntlich 360° hat und der Minutenzeiger in dieser Stunde diese 360° zurücklegt, legt der Stundenzeiger diesen Weg in 12 Stunden zurück.
Somit legt der Stundenzeiger in 1 Minute 1/12 des Vollkreises zurück, also 360/12=30°. Diese 30° in 5 Abschnitte unterteilt ergibt 6°, die sich der Stundenzeiger in 12 Minuten bewegen soll. Möchtest du die Unterteilung feiner haben, dann nimmst du z.B. 3° für alle 6 Minuten. Das Spiel läßt sich beliebig fortführen.

Du kannst nun, wenn du deine Uhr stellst, in Abhängigkeit von deinen Einstellungen feststellen, wo der Stundenzeiger sein müßte und fährst ihn dort hin.

Für 16:36 Uhr müßte dein Minutenzeiger somit in der Position 216° befinden und der Stundenzeiger bei 4 x 30° [0-4 bzw. 12-16] + 3 x 6° [4:21-4:22-4:23] = 138° befinden.

Wenn du einen Stepper ansteuerst, nimmst du eben diese 360° als Sim-Wert und 2048 als Stepper-Wert.
Dann setzt du den Haken bei Kompaß-Mode und kannst im Grunde für den Minutenzeiger jeweils die Anzahl_Minuten * 6° schicken und wenn die Minute jeweils durch 12 teilbar ist schickst du deinen Stundenzeiger 6° weiter. Die Formel dafür wäre mit Modulorechnung: Minuten % 12 = Stundenwert + 6.

Sag bescheid, ob's eklappt hat.
Grüße,
Stephan (Time: UTC+2)
2021-08-05 01:40
Avatar
schillermetall
Posts: 22
Das Prinzip habe ich schon verstanden.
Demnach müsste ich also den offset 0x0239 für Minuten nehmen und mit der Formel entsprechend anpassen?!

Das heißt aber im Umkehrschluss, dass ich den Stundenzeiger jedes Mal auf die entsprechende Stunde stellen muss, da der Minuten-offset ja keine "Stundeninformation" liefert.

Optimaler wäre eine Kombination aus dem Stunden- und Minuten-offset.
2021-08-08 09:45
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Hi Roland,

du kannst ja den Minutenoffset in die config references der Stunden übernehmen. Hier gibst du der Referenz einen Namen, z.B. A.
Dann schreibst du eine Formel in die Transformzeile:
if($>11,($-12)*30+(A/12*6),$*30+(A/12*6))

liest sich wie folgt: ist die aktuelle Stunde ($) größer als 11 wird von diesem Wert 12 abgezogen, danach werden die Minuten durch 12 dividiert und dieser Wert mit 6 multipliziert.
Im anderen Fall, daß es vor 12 Uhr ist, unterbleibt die Subtraktion von 12, der Rest wie vor.
Beispiel: 08:23 Uhr.
$ als aktueller Wert des Offsets ist 8, multipliziert mit 30 ist 240. 23 / 12 ist 1, da eine Berechnung im Transform immer ein Integerwert ist. Diese 1 mit 6 multipliziert bleibt 6.
240 + 6 = 246 und der kleine Zeiger muß auf den Wert 236 wandern bzw. gestellt werden.
Bei 14:49 Uhr genauso: 14 ist größer als 12, verbleiben 2 auf einer analogen Uhr multipliziert mit 30 sind 60. 49 / 12 sind 4 (der Rest wird vernachlässigt, 4 x 6=24. 60 + 24 = 84
86+6 wären 90 und das wäre quasi 1 Minute vor 1/4 nach, also 14 - paßt auch.

Somit kannst du den Minutenzeige direkt in 6°-Schritten steuern und den Stundenzeiger unter zuhilfenahme des Minutenzeigers exakt positionieren.
Wie gesagt, bei kleineren als den 6° Schriitten kannst du den Stundenzeiger bei kleineren Schritten auch entsprechend weicher führen. Bei 3° springt er halt nur noch eine "halbe Minute", bei 1,5° eine Viertel. Entsprechend häufiger müßtest du dann berechnen. Kannst ja mal mit spielen.
[Last edited by StephanHo, 2021-08-11 12:49]
Grüße,
Stephan (Time: UTC+2)
2021-08-08 20:41
Avatar
schillermetall
Posts: 22
Habe ich das richtig verstanden, ich nehme also den offset 0x0239 (Miniuten) für den Stundenzeiger?
Dann muss ich ja vor jedem Flug den Stundenzeiger manuell kalibrieren.
2021-08-10 19:39
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Hi Roland,

irgendwie reden wir aneinander vorbei...

Du baust dir zunächst eine config für den Minutenzeiger mit dem Offset 0x0239. Schließt den Stepper an den Ausgang und läßt dir damit die Minuten anzeigen.

Wenn das abgeschlossen ist, machst du eine neue config für den Stundenzeiger mit dem Offset 0x0238.

Hier gehst du auf den Tab Sim Variable und schaust dir den unteren Teil an. Er hat die Überschrift Config References

Aktiviere den ersten Eintrag durch Setzen des Hakens und klicke im nächsten Feld rechts auf den Pfeil nach unten.

Hier klappen nun alle output-configs auf, die du bislang festgelegt hast. Suche hier den Namen der config für den Minutenzeiger und wähle ihn aus.

Nun setzt du in dieser Zeile ganz rechts einen Bezeichner . Normalerweise steht hier das #-Zeichen. Ersetze es durch ein "A".

Dadurch hast du nun die Möglichkeit, in der Transformzeile sowohl den aktuellen Offset des Stundenzeigers (repräsentiert durch das $-Zeichen) UND den des Minutenzeigers (repräsentiert durch das "A") zu kombinieren.
Ohne den Minutenzeiger sah deine Formel vermutlich so aus: if($>11,($-12)*30,$*30)
Bei dieser Formel springt der Stundenzeiger immer nur eine Stunde weiter. Ein Umstand, der dir zu grob ist. Daher muß eine Möglichkeit her, die Minuten (aus dem Offset bzw. deiner anderen config) mit einzubeziehen.
Diese Möglichkeit bietet dir die config reference. Hier holen wir uns einen neuen Wert in die Formel, nämlich den Offset aus der Config für die Minuten, dem das Formelzeichen A zugeordnet wurde.
Somit muß die neue Formel für die Anzeige der (analogen) Stunde wie folgt erweitert werden:

if($>11,($-12)*30+(A/12*6),$*30+(A/12*6))

Eine if-Bedingung liest sich in MF wie folgt: wenn (Bedingung, dann mache diese, sonst das)
Die Wenn-Bedingung ist hier if($>12,, soll heißen, daß die Stunden vom Offset 0x0238 mit einem Wert von 0 - 23 übergeben werden. Jetzt dreht dein Stundenzeiger aber nach 12 Stunden ein weiteres mal seine Runde und kann die 13 Uhr nicht als 13 anzeigen, sondern zeigt ein zweites Mal auf die 1. Daher in der Formel: if($>11,

Wenn aktuelle Stunden größer ist als 11 (also 12 bis 23) subtrahiere vom Stundenwert 12 und multipliziere das Ergebnis mit 30° (Winkel für die Stunden 0 bis 11).
Wichtig ist hier die Klammersetzung, denn sonst wird 12*30 multipliziert , weil Punkt vor Strichrechnung geht und erst dann wird $ subtrahiert, was falsch wäre. Daher muß ($-12) in die Klammer, damit es zuerst gerechnet wird, weil bekanntlich das, was in der Klammer steht, zuerst gerechnet wird.

Normalerweise wandert dein Stundenzeiger zwischen 12 und 13 Uhr bzw. 0 und 1 Uhr nicht, erst ab 13 bzw. 1 Uhr springt er. Da kommt jetzt die Neuerung in die Formel:

Nun soll der Stundenzeiger aber quasi nicht von der 0 zur 1 springen, sondern von 0 auf 00:01, 00:02, 00:03, 00:04 und 00:05. Er soll also nicht in einer Stunde 30° springen, sondern 5 * 6° "hüpfen". Also teilen wir die 60 Minuten vom Minutenzeiger durch 5 und erhalten 12 (Minuten). Der Stundenzeiger soll also 1 Minuten weiterrücken, wenn der Minutenzeiger 12 Minuten weitergegangen ist.
Also dividieren wir den Wert, den der Minutenoffset über das Formelzeichen A liefert durch 12. Die Bruchteile, die in der Zeit von Minute 0 bis 11 entstehen, werden im Transform nicht berücksichtigt, also ist A/12 solange 0, von 12 bis 23 ist der Wert 1, von 24 bis 35 ist er 2 usw.
Das Ergebnis dieser Division wird dann mit 6° multipliziert. Solange der Wert 0 ist (minute 0 bis 11) bewegt sich der Stundenzeiger nicht. Sobald der Wert 1 oder höher ist, wird der Stundenzeiger also 6° weiterbewegt.

Dies bedeutet für unsere Formel: if($>11,($-12)*30+(A/12*6),
Ist der Stundenwert also größer als 11, beispielsweise 12, wird hiervon 12 subtrahiert. Nun kommt der Offset des Minutenzeigers ins Spiel. Von Minute 0 bis 11 ist dieser Wert ebenfalls 0 und der Stundenzeiger bleibt auf der 12 bzw 0. Denn 11/12 (integerwert) ist 0, multipliziert mit 6 ist ebenfalls 0.
Ab 12:12 sieht die Rechnung anders aus: (12-12)*30+(12/12*6) ist 0+1*6=6. Der Stundenzeiger wird also um 6° weiterbewegt und steht nun auf der 00:01.
Um 17:48 Uhr sieht es ähnlich aus: (17-12)*30 + (48/12)*6 = 5*30 + 4*6 = 150 + 24 =174
Der große Zeiger steht also auf der 48 und der Stundenzeiger auf der 4. Minute nach der 5

Ist es nun vor 12:00 Uhr, greift die dann Bedingung: if($>11,($-12)*30+(A/12*6),$*30+(A/12*6))
Sie arbeitet wie der erste Teil, nur das hier vom aktuellen Stundenwert nicht 12 subtrahiert wird.

Der Stunden- und der Minutenzeiger müssen lediglich einmal beim Erstellen der Config kalibriert werden, indem du den Nullpunkt setzt. Aktiviere dann noch den Kompaß-Modus, weil deine Zeiger ja jeweills mehr als 360° drehen.
Bei jedem erneuten Einschalten steht dann deine Uhr zunächst auf 12:00, sobald aber der Simulator läuft und die Offsets gelesen werden, stellt sich deine Uhr automatisch nach der Simulatoruhr. Ein erneutes kalibrieren ist somit nicht erforderlich. Selbst, wenn du die Simulatoruhr manuell verstellen solltest, stellt sich deine analoge Uhr immer wieder nach dieser Uhr automatisch ein.

Wir können uns hierzu auch gerne auf Discord treffen. Einfach auf https://discord.com/ gehem, discord downloaden und hier oben auf den Link klicken.
Grüße,
Stephan (Time: UTC+2)
2021-08-11 12:48
Avatar
schillermetall
Posts: 22
Vielen Dank, das klingt total spannend.
Ich werde es am Wochenende ausprobieren und gleich berichten.
2021-08-12 19:04
Avatar
schillermetall
Posts: 22
Ich hab alles so eingegeben.
Grundsätzlich funktioniert es auch, nur das der Stundenzeiger jetzt rückwärts läuft.
Er läuft also z.B. von 15:00 auf 14:00 und springt dann auf 16:00
2021-08-13 20:22
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Das kann ja nur passieren, wenn der Wert, der an den Stepper übergeben wird, negativ ist.
Hast du mal auf der Hauptseite von MF im Output-Tab nachgeschaut, was da für Werte laufen?
Grüße,
Stephan (Time: UTC+2)
2021-08-13 21:23
Avatar
schillermetall
Posts: 22
Der Output-Wert läuft rückwärts.
2021-08-14 10:10
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Wie läuft denn der FSUIPC-Wert? Auch rückwärts? Wenn ja stimmt evtl. der Offset nicht, wenn nein, dann stimmt deine Formel nicht.
Hast du bei Config References denn die richtige config ausgewählt und den Formelbuchstaben so in Transform übernommen?

Der Stundenzeiger kann nach der Formel niemals rückwärts laufen.
15-12=3 - 3 * 30 = 90 + 0 = 90 (sofern der Minutenzeiger auf der 12 steht).
Bei 14:00 müßte der Ausgabewert 60 sein ((14-12)=2 * 30), das kann aber bei Stundenoffset nicht sein, denn die Uhrzeit läuft vorwärts.

EDIT:
Ein Denkfehler bei mir:

Du mußt für die Minuten eine 2. Config machen.

Die erste Config steuert ja den Minutenzeiger, indem die Anzahl der Minuten mit 6° multipliziert wird.

Bezieht man sich dann bei der Stunden auf diese Config, wird mit den bereits gerechnetem Minutenwert * 6 der Stundenzeiger berechnet.

Du mußt dir also eine weitere Config mit dem Minutenoffset erstellen und dich bei der Stunde dann auf diesen (ungerechneten) Wert beziehen. Das Formelzeichen kann gleich bleiben.

Dann kommt zwar bei der Multiplikation zwar immer ein Interger als Ergebnis heraus, vorher werden aber die Nachkommastellen in die Berechnung mit einbezogen. Das muß also unterbunden werden.. Daher muß die Formel im Transform ergänzt werden:

if($>11,($-12)*30+(Floor(A/12)*6),$*30+(Floor(A/12)*6))

Mit Floor erhält man nach der Berechnung einen abgerundeten Integerwert, mit dem dann weitergerechnet wird.
Die Funktion kannst du hier nachlesen: https://github.com/ncalc/ncalc/wiki/Functions
Es bleibt aber dabei: Der Stundenzeiger darf nicht rückwärts laufen.
[Last edited by StephanHo, 2021-08-14 12:47]
Grüße,
Stephan (Time: UTC+2)
2021-08-14 12:11
Avatar
schillermetall
Posts: 22
Nichts zu machen, der Output-Wert läuft rückwärts.
Der Flight Sim Wert zeigt korrekt die volle Stunde an.

Unter dem Reiter Sim Variable habe ich folgende Einstellungen:
FSUIPC Offset
Wert Typ: Int Size in Byte: 1
Maskiere Wert mit: 0xFF
Transform: if($>11,($-12)*30+(Floor(A/12)*6),$*30+(Floor(A/12)*6))
Config Referenz: nimm Clock minuten als A

Vergleichen:
keine Einstellungen

Display:
Sim/Stepper: 360 2048
TestWert: 360

Vorbedingungen:
keine Einstellungen
2021-08-14 17:33
Avatar
schillermetall
Posts: 22
Ich habe mal ein bisscher herum probiert.
Nach meinem Verständniss; wenn "+" rückwärts läuft, muss "-" vorwärts laufen:

if($>11,($-12)*30-(Floor(A/12)*6),$*30-(Floor(A/12)*6))

und was soll ich dir sagen; es funzt (warum auch immer...)

Ich bin super Glücklich, das war eine echte Hilfe.
Jetzt starre ich den ganzen Flug nur noch auf die Clock :)

VIELEN VIELEN DANK
2021-08-14 19:40
Avatar
StephanHo
Moderator
From: EDDG, Germany
Posts: 1867
Supporter
Gerne,

aber mir ist absolut schleierhaft, wie deine Uhr rückwärts läuft. Die Minuten scheinen ja korrekt zu funktionieren, die Stunden hingegen nicht?
Kann es sein, daß der Stundenstepper falsch angeschlossen ist?
Bei läuft das mit "+" völlig normal und korrekt.
Grüße,
Stephan (Time: UTC+2)
2021-08-16 00:30
Avatar
schillermetall
Posts: 22
Das mit dem falsch angeschlossenem Stepper war auch mein erster Gedanke, aber wenn ich die Polung umdrehe, zeigt der Zeiger völlig falsch an.
2021-08-16 14:15
icon