Moin,
ich kenne zwar BLOCKLY nicht (sieht ein bisschen aus wie Lego-Mindstorm ab 10 Jahre...), aber hier ein paar Gedanken:
- Oberste Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): Trigger
- Wie wird/werden der/die erzeugt?
- Wie lange steht der an? Von z.B. 03:45:00 bis 03:45:59? Oder als verlängerter Impuls für z.B. 2 Sekunden?
- Warum die Bedingung "wurde geändert"? So würde die Bedingung zweimal erfüllt sein, einmal beim Wechsel von 0 auf 1 und dann wieder beim Wechsel von 1 auf 0. Ausserdem wird die Wenn-Dann-Sonst-Anweisung genau 1x je Änderung durchlaufen, denn im nächsten Zyklus hat sich der Trigger ja nicht mehr geändert.
- Besser wäre die Abfrage auf TRUE (wahr, 1) bei steigender Flanke. Damit einen Merker (Flag) setzen, welcher erst nach Abarbeitung der gesamten Aufgabe zurückgesetzt wird.
- Zweite Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): Nachts oder Tagsüber
- Warum die doppelte Verneinung?
- Besser wäre "zwischen Sonnenuntergang und Sonnenaufgang (also nachts) oder
- "zwischen Sonnenaufgang und Sonnenuntergang" (also tagsüber), dafür aber die Inhalte von "mache" (THEN) und "sonst" (ELSE) tauschen.
- Dritte Wenn-Dann-Sonst-Anweisung (IF-THEN-ELSE): SWITCH ist An oder AUS
- Auch wird diese Anweisung nur 1x durchlaufen, im nächsten Zyklus passiert nichts mehr.
- Wie sind "Brightness" und "Volume" mit der "Object-ID" verbunden? Beim "SWITCH" wird die ID ja angeführt.
- Sind die Werte 10 bzw. 20 absolute Werte? Oder inkrementell, soll heißen,
wenn der aktuelle Wert z.B. 10 ist, dann bewirkt der Aufruf "steuere ...
mit 10", dass auf 20 erhöht wird. (oder vice-versa "steuere mit -10" =
Wert 0).
- Zu guterletzt:
- Solange ein Trigger ansteht und es ist am Tage werden die Anweisungen im Bereich "sonst" (ELSE) der zweiten Ebene dauernd ausgeführt. Falls die Steuerwerte inkrementell wirken, wäre z.B. das Volumen spätestens nach dem fünften Zyklus auf 100%.
Wenn du, und das ist ja das Thema, langsam aufdimmen möchtest, dann brauchst du ein wenig mehr. Deklariere geeignete Variablen (Speicher), z.B.:
- DIM varWertSteigerungZeit := INT //Wert in Sekunden
- DIM varWertSteigerungValue := INT //Wert in %
- DIM varTrigger := BOOL //Ein Trigger ist aktiv
- DIM varTag := BOOL //Es ist Tag
- DIM varNacht := BOOL //Es ist Nacht
Versuche, die gesamte Aufgabe in kleinere Teilaufgaben zu zerlegen:
Wenn Trigger_01 oder Trigger-02 oder Trigger_03 = TRUE
Dann varTrigger := TRUE
Wenn zwischen Sonnenaufgang und Sonnenuntergang
Dann varTag := TRUE
Sonst varTag := FALSE
Wenn zwischen Sonnenuntergang und Sonnenaufgang
Dann varNacht := TRUE
Sonst varNacht := FALSE
Wenn varTag = TRUE und varTrigger = TRUE
Dann rufe funktionTag() auf
Wenn varNacht = TRUE und varTrigger = TRUE
Dann rufe funktionNacht() auf
funktionTag()
Radio an..
Volume laut..
varTrigger := FALSE
funktionNacht()
Wenn Switch = FALSE
Dann Switch an, Radio an, Volume leise
Wenn Brightness <100
Dann Delay(varWertSteigerungZeit)
Wenn Delay = TRUE
Dann Brightness := Brightness + varWertSteigerungValue und Delay := FALSE
Wenn Brightness => 100
Dann varTrigger := FALSE
Das musst du natürlich in die Syntax von BLOCKLY überführen. Aber es ist ein Anfang.