![]() |
![]() |
|
![]() |
![]() |
|
Designer Forum Treffpunkt für Gedankenaustausch von Simmern, die selbst |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Veteran
![]() |
![]() Hallo zusammen,
hab mal eine Frage an die Gauge-Programmier-Profis (neuse Unwort ![]() Leider funktioniert das im FS nicht so ganz: er quittiert das mit komischen Knacksern wenn der Ton eigentlich bei 150ft zu hören sein sollte, ab 50ft spielt er es klar ab. Wenn ich nur eine Variante nutze klappt alles wunderbar. So sieht der Code-Schnipsel aus: Code:
////////////////////////// DH Warning Tone if(DecisionHeight > 2500) {DecisionHeight = 2500;} if(DecisionHeight > 410); // 150ft Warning {UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084); if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} else if (val - DecisionHeight == 0) {MFSSoundStop(dhwarn);} else {MFSSoundStop(dhwarn);} } if(DecisionHeight < 400); // 50ft Warning {UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084); if ((val - DecisionHeight < 50) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} else if (val - DecisionHeight == 0) {MFSSoundStop(dhwarn);} else {MFSSoundStop(dhwarn);} } Viele Grüße |
![]() |
![]() |
![]() |
#2 |
Inventar
![]() Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908
|
![]() Wenn ich das richtig sehe, startest Du den Sound immer wieder neu. Mach Dir mal ein Flag, mit dem Du abprüfst, ob er schon abgespielt wird.
Code:
if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0) && !dhwarnflag) { MFSSoundFilePlay(dhwarn, FALSE); dhwarnflag = true; } |
![]() |
![]() |
![]() |
#3 |
Veteran
![]() Registriert seit: 28.03.2000
Beiträge: 236
|
![]() Hi Sven,
bin kein C Programmierer und kann daher zu dem Source Code nicht viel sagen, allerdings ist mir in Deinem Code eine kleine Unstimmigkeit aufgefallen, wobei ich nicht unbedingt denke, dass Dein Problem damit zu tun hat. In Deinem Source Code prüfst Du mit der ersten If Anweisung, ob die Variable "var" - der eingestellten Decision Height kleiner 150 ist. In der folgenden Else If Anweisung prüfst Du, ob die gleiche Bedingung = 0 ist. Nun, wenn "var" - der eingestellten Decision Height = 0 ist ist sie gleichzeitig auch kleiner 150, es treffen also sowohl If wie auch Else If zu. Lösen könntest Du das Problem indem Du in der ersten Anweisung "var" - der eingestellten Decision Height kleiner 150 UND "var" - der eingestellten Decision Height größer 0 einbaust (zusätzlich zur Abfrage ob Vertical Speed negativ ist, was Du ja schon drin hast). Warum ich nicht glaube, dass es damit zusammenhängt ist, dass es sicherlich sehr selten sein dürfte, dass beide Bedingungen gleichzeitig zutreffen und zum anderen das Problem auch dann auftreten dürfte, wenn nur eine der beiden grundsätzlichen Abfragen vorhanden ist. Aber korrigieren würde ich es dennoch sicherheitshalber. Gruß Matthias
____________________________________
The BAe Panel Project www.baepanelproject.com |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() Registriert seit: 13.07.2004
Beiträge: 371
|
![]() Hi Sven,
lösch einmal die Strichpunkte (Semikolons) nach den if's: Code:
////////////////////////// DH Warning Tone if(DecisionHeight > 2500) {DecisionHeight = 2500;} if(DecisionHeight > 410) // 150ft Warning {UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084); if ((val - DecisionHeight < 150) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} else if (val - DecisionHeight == 0) {MFSSoundStop(dhwarn);} else {MFSSoundStop(dhwarn);} } if(DecisionHeight < 400) // 50ft Warning {UINT32 val = (UINT32) (radio_height_var.var_value.n * 3.28084); if ((val - DecisionHeight < 50) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} else if (val - DecisionHeight == 0) {MFSSoundStop(dhwarn);} else {MFSSoundStop(dhwarn);} } Hoffe geholfen zu haben! Grüsse, Christoph
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler! |
![]() |
![]() |
![]() |
#5 | |
Inventar
![]() Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908
|
![]() Zitat:
|
|
![]() |
![]() |
![]() |
#6 | ||
Veteran
![]() |
![]() Zitat:
Werd mal den Tip von Hans umsetzen. Wollte ich eigentlich heute morgen gleich machen aber naja, bei uns Feiertag und die Familie rief zum Frühstück ![]() Meld ich dann gleich nochmal. @Matthias Zitat:
|
||
![]() |
![]() |
![]() |
#7 |
Veteran
![]() |
![]() So Jungs, geschafft
![]() Die Lösung war ebenso einfach wie genial: man schaue sich die ganzen "Formeln" an, packe alles in eine Zeile (ok, mit Umbruch zwecks Übersichtlichkeit) und schaue nach was passiert. Ein klein wenig "Try and Error" hilft auch manchmal weiter ![]() So sieht das ganze jetzt aus, tut wie gewünscht: Code:
////////////////////////// DH Warning Tone if((DecisionHeight > 400) && (DecisionHeight < 2500) && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight < 150)) && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight > 0)) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} //150ft Warning else if((DecisionHeight < 400) && (DecisionHeight > 0) && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight < 50)) && ((UINT32) (radio_height_var.var_value.n * 3.28084 - DecisionHeight > 0)) && (vs_var.var_value.n <0)) {MFSSoundFilePlay(dhwarn, FALSE);} // 50ft Warning else {MFSSoundStop(dhwarn);} ![]() Viele Grüße |
![]() |
![]() |
![]() |
#8 | |
Veteran
![]() Registriert seit: 13.07.2004
Beiträge: 371
|
![]() Zitat:
if(DecisionHeight > 410); // 150ft Warning
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler! |
|
![]() |
![]() |
![]() |
#9 |
Inventar
![]() Registriert seit: 12.02.2001
Alter: 57
Beiträge: 2.908
|
![]() Jo, aber an der Stelle hat das keinerlei Auswirkung.
|
![]() |
![]() |
![]() |
#10 | |
Veteran
![]() Registriert seit: 13.07.2004
Beiträge: 371
|
![]() Zitat:
(zur Info: ich programmiere seit etwa 14 Jahren C und C++!) Grüsse, Christoph
____________________________________
Stolzer PPL-Besitzer und IFR-Schüler! |
|
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|