NEWS
Schleife mit Blockly
-
Ich bekomme die Schleifen Funktion bei Blockly nicht auf die Reihe.
Ich möchte das eine Ansage einfach 3x wiederholt wird, aber irgendwie versteh ich die Logik wie das abläuft nicht und schicke mit dem Blockly mein Pi in eine Endlosschleife. Kann mir bitte einer die grundsätzliche Funktion erklären und wie man den Block richtig setzt?
-
Das Hochzählen des Zählers muss in die Schleife (grüner Kasten).
Gruß
Holger
-
Das hatte ich auch schon, dann war der Pi sofort in einer Schleife gehangen.
Wie setzte ich eigentlich die Schleife "wiederhole x mal" richtig ein? Das Problem liegt wohl darin, das er die Aktion dann eben sehr schnell x mal hintereinander ausführt und ich das nicht mitbekomme.
Wie geschrieben, mir ist das nicht ganz schlüssig wie die Schleife abläuft und deshalb tu ich mich schwer die richtig einzusetzen.
Könnte mir einer das Blockly so basteln, dass der Text einfach 3x so hintereinander ausgegeben wird, und keine Überschneidung gibt? Wenn ich das vor mir habe, fällt hoffentlich endlich der Groschen :lol:
-
Könnte mir einer das Blockly so basteln, dass der Text einfach 3x so hintereinander ausgegeben wird, und keine Überschneidung gibt? Wenn ich das vor mir habe, fällt hoffentlich endlich der Groschen :lol: `
Wenn du in etwa weißt, wie lange die Ausgabe dauert, nimm ein Intervall. Darin kannst du eine Variable hochzählen lassen und nach dem 3. Mal das Intervall beenden.
Dann wird der Code darin z.B. nach 1000, 2000 und 3000 ms ausgeführt. Hab kein Blockly zur Hand, sonst würde ich es schnell zusammen klicken.
-
Wo muss denn hier das "Stop" hin?
-
Einmal in den Sonst-Abschnitt deiner äußeren Abfrage, damit bei Änderung der Ringing-Variable auf false das Intervall gestoppt wird.
Und einmal in das Intervall selbst ans Ende mit einer Abfrage "Falls Zähler >= 3, dann stop".
So wie es aktuell aufgebaut ist, besteht aber die Gefahr, dass das Intervall mehrfach gestartet wird - sofern es möglich ist, dass Ringing mehrfach auf wahr gesetzt wird.
-
Danke für Deine Hilfe. Mit der Änderung läuft es. Hatte ich mir schon gedacht, das ich hier noch eine "falls" Bedingung benötige um das wieder zu stoppen.
Was mir allerdings überhaupt nicht gefällt, dass das Blockly für das bisschen Funktion so groß sein muss, wenn ich es mit einer Schleife oder Intervall erledigen will. Ich bin wieder zur Urversion zurück und rufe einfach 3 mal die Aktion zeitlich versetzt auf, so wie ich es am Anfang hatte :lol:
Das läuft genau wie ich es will, nur dachte ich mir, dass das doch recht primitiv ist und das ganze sollte doch auch eleganter zu lösen sein. Man lernt eben immer dazu
-
Das läuft genau wie ich es will, nur dachte ich mir, dass das doch recht primitiv ist und das ganze sollte doch auch eleganter zu lösen sein. Man lernt eben immer dazu `
Manchmal sind die einfachsten Lösungen doch die besten. Größere Anzahlen kann man z.B. so mit einer Schleife realisieren (ohne vorzeitigen Abbruch der Ausgabe):Schleife über i von 1 bis 100 -- Timeout (i * 1000ms): Sprachausgabe
nur weiß ich nicht, ob variable Timeouts in Blockly möglich sind.
In JS ist das ein Dreizeiler (ungefähr).
Die Idiotensichere Variante wäre übrigens noch viel komplizierter…
-
Erkennen ob bereits ein "Sprachausgabeprozess" läuft
-
Überschneidende Trigger entweder hinten anstellen oder ignorieren
-
Erkennen, wann die einzelne Sprachausgabe abgeschlossen ist und dann Timeout für die nächste starten (für unterschiedlich lange Texte)
-
und, und, und...
-