Aerosoft official retail partner for Microsoft Flight Simulator !! 
Click here for more information

Jump to content

Archived

This topic is now archived and is closed to further replies.

Snake82

Button funtioniert nur solange wie ich ihn gedrückt halt ?!

Recommended Posts

Hallöchen,

 

ich habe ein kleines Problem und zwar versuche ich gerade mit Fly with lua meine Knöpfe vom Joystick usw zu Programmieren.

 

Ich habe nun folgendes geschrieben.

 

dataref("Strobe","sim/custom/xap/extlight/strobe_sw","writable")

function Strobe_button()
   if button(0) then
     set ("sim/custom/xap/extlight/strobe_sw",1)
   else    
     set ("sim/custom/xap/extlight/strobe_sw",0)    
   end    
end

do_every_frame("Strobe_button()")

 

Jetzt is aber das Problem wenn ich den Button drück geht das Strobe Light zwar an aber sobald den den button wieder los lasse geht es wieder aus. Heist also ich müsste die ganze zeit den button gedrückt halte wenn ich das Strobe light anhaben möchte..

 

Ich möchte es aber gerne so haben wenn ich den button drücke und das strobe light is aus soll es an gehen wenn ich dann wieder drauf drücke aus.

 

Ich hoffe ihr versteht was ich meine..

 

Vielen dank schonmal im vorrauf für eure Hilfe

 

Snake82

Share this post


Link to post
Share on other sites

Hi !

 

Tja, Du möchtest aus einem Joystick-Knopf per Software einen Schalter machen :)

 

Geht, braucht aber ein paar Zeilen mehr Code.... Du musst Dir in einer Variable den Zustand

des Strobe-Light merken und diese jedesmal ändern, wenn Du den Knopf drückst.

Und dann noch etwas "entprellen", weil Du sonst eine Änderung pro Frame bekommst. D.h.

Du darfst die Variable nur einmalig in dem Moment ändern, wenn Du feststellst das der Knopfzustand sich

geändert hat (Knopf "nicht gedrückt" -> "gedrückt")

 

Gruß

 

Thomas

 

Share this post


Link to post
Share on other sites

Warum nicht Strobe_lights_toggle dem Button zuordnen?

 

Im Flusi oben in der einblendbaren Zeile "Settings" wählen, dort Joystick und dort den Button deiner Wahl mit "Strobe lights toggle" belegen.

(Flight Controls/Lights/Strobe lights toggle)

 

Gruß

Othello

 

 

Edit, und wenn du das per Luascript machen willst, dann nicht bei jedem Frame, sondern nur dann, wenn du den Button drückst.

Dazu kannst du in FlywithLua eine Funktion definieren, die du dann einem Button oder einer Taste zuordnen kannst.

Wird der Button (die Taste) gedrückt, wird die Funktion gerufen - fertig.

 

 

Beispiel für die B200 von Carenado:

 

local s1_set = dataref_table("com/dkmp/Start1")

 

function eng_starter_1_ON()
  s1_set[0] = 1
end

 

function eng_starter_1_OFF()
  s1_set[0] = 0
end

 

create_command( "GKWI/electrical/starter_1_ON", "engage starter 1",
                "eng_starter_1_ON()", "", "" )
                
create_command( "GKWI/electrical/starter_2_ON", "engage starter 2",
                "eng_starter_2_ON()", "", "" )

 

 

 

Share this post


Link to post
Share on other sites

Hallo,

ersteinmal danke für eure Antworten.

 

@Othello zu deiner Frage wieso ich das nicht einfach mit "strobe light toggle" mache ist ganz einfach. Es funktioniert nicht :-)

 

Ich möchte das halt für den Jardesign A330 machen und der benutzt leider fast nur eigene Datarefs.

 

Ich werde das mal mit deinem Beispiel versuchen wenn ich hinbekomme zu entziffern was ich da wie ersetzten muss da ich leider nicht so viel ahnung von lua habe :-)

 

EDIT:

 

Ich habe es jetzt soweit hinbekommen das script sieht momentan so aus.

 

local s1_set = dataref_table("sim/custom/xap/extlight/strobe_sw")

 

function strobe_ON()
  s1_set[0] = 1
end

 

function strobe_OFF()
  s1_set[0] = 0
end

 

create_command( "A330/Light/strobe_ON", "Strobe Light On","strobe_ON()","", "" )

 

Das Problem is das das Strobe light nun an geht aber nicht mehr aus. D.h. ich müsste nun ein zweites command erstellen und dies auf einenen zweiten button legen. Kann man das nicht irgendwie machen das ich das mit ein und denselben button an und aus bekomme ?

 

EDIT 2:

 

Ok habe es hinbekommen das script sieht nun so aus.

 

local s1_set = dataref_table("sim/custom/xap/extlight/strobe_sw")

function strobe_ON()
  if s1_set[0] == 0 then
  s1_set[0] = 1
  else
  s1_set[0] = 0
end
end

create_command( "A330/Light/strobe_ON", "Strobe Light On","strobe_ON()","", "" )

 

Vielen dank nochmal an Othello :)

 

MFG Snake82

Share this post


Link to post
Share on other sites

Prima, sieht gut aus :-)

Wenn der Fliegerhersteller kein Toggle anbietet, ist das genau die richtige Lösung.

 

Nur der Ordnung halber, ich würde das neue Kommando "Strobe Light Toggle"  nennen.

Share this post


Link to post
Share on other sites

Schaut euch bitte die create_... Funktionen in FlyWithLua an (Handbuch ab Seite 23). Das Vorhaben erfordert eine einzige Zeile Code. Nehmen wir an der Joystick Knopf hätte die interne Nummer 28 (kann man über den Button Sniffer herausfinden), dann sähe das Script so aus:

create_positive_edge_flip(28, "sim/custom/xap/extlight/strobe_sw")

Die create_... Funktionen erzeugen eine im Hintergrund permanent aktive Logikschaltung, als hätte man eine SPS verdrahtet. Eine positive Flanke meint in der SPS Welt dass ein Signaleingang von 0 auf 1 wechselt, du also die Taste beginnst zu drücken. Beim Loslassen wechselt der Zustand wieder von 1 auf 0, hier wäre create_negative_edge_... zu wählen. Damit programmiert man also eine Tastfunktion.

 

Ein Flipflop wechselt einen Zustand. Im Normalfall wechselt FlyWithLua das DataRef mit dem Index 0 zwischen den Werten 0 und 1. Man könnte also ausführlicher schreiben:

create_positive_edge_flip(28, "sim/custom/xap/extlight/strobe_sw", 0, 0, 1)

Was man aber nicht braucht (FlyWithLua unterstützt Faulheit wenn es die Lesbarkeit erleichtert).

 

Die von FlyWithLua implementierte SPS Simulation ist deutlich schneller und viel weniger speicherintensiv als reiner Lua Code. Das sollte man immer vorziehen, wenn es möglich ist. Die Funktionen sind aber nicht so flexibel. Willst du nur schalten bei bewölktem Himmel oder nachts bei Neumond das Strobe automatisch aktivieren, dann musst du Lua Code schreiben. ;)

Share this post


Link to post
Share on other sites

Ich habe nach etwas Nachdenken meine Frage wieder gelöscht.

 

Danke für die Info, und Danke für FlyWithLua!

Share this post


Link to post
Share on other sites

Mit create_switch(123, "sim/data/ref/...") wird der Zustand des Button immer direkt in das DataRef geschrieben.

 

Falls ich mich richtig an die Frage erinnere.

Share this post


Link to post
Share on other sites

Danke und ja, die Frage war, wie man mit create_ die Dauerfunktion realisiert.

Share this post


Link to post
Share on other sites

×
×
  • Create New...