NEWS
Timeout in Schleife wieder schließen
-
Hallo zusammen,
ich habe mir eine Bewässerungssteuerung zusammengestellt, die in mehreren Intervallen (t_intervall) das gleiche Ventil anstellen soll (über den Smartgarden Adapter). Nun könnte ich das natürlich über den Intervallblock lösen, allerdings hat das den Nachteil, dass erst nach dem eingestellten Zeitintervall (t_0+1*t_intervall) das Ventil eingeschaltet wird und man über einen zusätzlichen Counter die Anzahl der Schaltungen mitverfolgen muss (irgendwann soll es ja auch wieder aufhören). Die Lösung für den späten Start ist, dass man vor dem Intervallblock, die Blocke, die zum Zeitpunkt t_0 ausgeführt werden sollen, redundant ausführt:
Für mich auch keine schöne Lösung.Meine Idee war daher, dass ich über eine for-Schleife timeouts zu verschiedenen Zeitpunkten starte, die ich ja im Vorfeld kenne. Ein Minimalbeispiel sieht wie folgt aus:
Allerdings tue ich mich momentan schwer damit, diese wieder zu stoppen, wenn ich z.B. die Bewässerung einmal unterbrechen möchte (daher der stop-timeout am Ende, um das einmal zu testen). Vielleicht hat von euch ja jemand eine gute Idee oder einen besseren Ansatz?Schon einmal herzlichen Dank!
-
@manuelg sagte: einen besseren Ansatz?
Rekursive Funktion mit Timeout
@manuelg sagte in Timeout in Schleife wieder schließen:
über eine for-Schleife timeouts zu verschiedenen Zeitpunkten starte
Alle 4 Timer werden quasi gleichzeitig gestartet und lassen sich nicht mehr stoppen.
-
@manuelg Das was du willst ist mit reinem Blockly nicht sauber umsetzbar, da du die Timeouts nicht zu 100% wie Variablen behandeln kannst. Du wirst daher nicht umhin kommen an Stelle der Schleife 4 einzelne "ausführen Timeout" Blöcke zu benutzen. Als alternative kannst du versuchen das ganze in JS zusammenzubauen und dann in Blockly als "JS Funktion" einzuhängen.
A.
-
Vielen Dank euch beiden! Ich schaue dann einmal, ob ich das über JS schreibe oder die Rekursion nutze.
-
@manuelg sagte in Timeout in Schleife wieder schließen:
oder einen besseren Ansatz?
bin jetzt kein Experte, aber ich hab so eine ähnliche Geschichte, nutze aber statt dem Timeout einen "Warte" Block.
damit werden dann nicht alle 4 gleichzeitig gestartet, sondern eben gewartet bis die Zeit um ist bevor die nächste Schleife los geht.