Sich wiederholende Intervalle ohne Delay Verzweiflung
|
11.12.2019, 17:25
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2019 17:27 von RobertLeRopp.)
Beitrag #9
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
(11.12.2019 17:06)Tommy56 schrieb: Und woher weist Du, ob es Tag oder Nacht ist? Danke für deine Bemühungen es zu verstehen. Ich weis leider nicht wie ich euch anhand meines Falles eine Skizze zeichnen soll. Wie lange die Relais und in welchem Abstand zueinander sie laufen sollen habe ich ja bereits erklärt. Aber hier nochmals: Relai1 5 Minuten an, nach Ablauf der 5 Minuten aus Relai2 5 Minuten an, nach Ablauf der 5 Minuten aus Relai3 5 Minuten an, nach Ablauf der 5 Minuten aus Relai3 5 Minuten an, nach Ablauf der 5 Minuten aus Und nun wie auch immer, einen endlosen Replay der ganzen Sache. Wie gesagt, jedes Relai nacheinander, nicht gleichzeitig. Ob es Tag oder Nacht ist wird bei mir über den Wert einer Photodiode festgestellt. Code: const int threshold = 100; |
|||
11.12.2019, 17:34
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2019 17:35 von Tommy56.)
Beitrag #10
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
Da solltest Du eine Hysterese einbauen, sonst flattert das am Umschaltpunkt:
Code: bool isNacht = false; Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
11.12.2019, 17:50
Beitrag #11
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
Das was Du willst ist einfach eine kleine Ablaufsteuerung/Schrittkette. Das Ablaufen der Zeit ist der 'Trigger' um den nächsten Schritt auszuführen. Du musst dir in einer Variable merken in welchem Schritt Du gerade bist, damit Du beim Zeitablauf dann die entsprechenden Aktionen ausführen kannst (Relais aus/ein ) und zum nächsten Schritt schaltest..
Da alles immer nacheinander abläuft, brauchst Du auch nur einen Zeitzähler. Gruß, Franz-Peter |
|||
11.12.2019, 18:29
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2019 18:37 von MicroBahner.)
Beitrag #12
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
hier ein Ansatz, den Du dann aufbohren kannst:
Code: const byte relPin[] = {2, 3, 4, 5}; Gruß, Franz-Peter |
|||
11.12.2019, 21:07
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2019 21:10 von MicroBahner.)
Beitrag #13
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
Hallo,
jetzt etwas verallgemeinert und mit Kommentaren. Ich hoffe, Du verstehst den Ablauf damit etwas besser. Der Sketch enthält jetzt auch den Ansatz für die Pausenintegration. Falls noch was unklar ist, kannst Du auch gleich hier fragen. Eventuell interessiert es ja auch den einen oder andern Mitleser. Code: // Schritte der Schrittkette mit der Pinnummern des angezogenen Relais, oder Gruß, Franz-Peter |
|||
11.12.2019, 22:14
Beitrag #14
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
Hallo MicroBahner, tausend dank für deine Zeit
![]() Ich versuche das nun alles zu verstehen und lese mich in die von dir benutzen Funktionen ein. Was mir noch unklar ist aber sehr wichtig wäre, ist die Serielle Ausgabe, eben die Info welches Relai gerade an ist. Ich habe das schon geschafft aber nur so das der Monitor durchgehen mit der Ausgabe vom aktuellen Relai geflutet wird. Gibt es die Möglichkeit, pro geschaltetem Relai immer nur die jeweilige Ausgabe einmal zu machen ? |
|||
11.12.2019, 22:33
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2019 22:34 von MicroBahner.)
Beitrag #15
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
Wenn Du die seriellen Ausgaben in der Schrittkette dort machst, wo auch die digitalen Ausgänge geschaltet werden, dann werden sie auch immer nur zum Schaltzeitpunkt einmalig ausgegeben.
z.B. Code: if ( relPin[neuerSchritt] < 255 ) { Gruß, Franz-Peter |
|||
11.12.2019, 22:50
Beitrag #16
|
|||
|
|||
RE: Sich wiederholende Intervalle ohne Delay Verzweiflung
(11.12.2019 22:33)MicroBahner schrieb: Wenn Du die seriellen Ausgaben in der Schrittkette dort machst, wo auch die digitalen Ausgänge geschaltet werden, dann werden sie auch immer nur zum Schaltzeitpunkt einmalig ausgegeben. Super das klappt. Ich habe jetzt einige Versuche mit der Variante Code: if ( relPin[schrittNr] < 255 ) { durchgespielt aber bekomme die Pause absolut nicht ordentlich zum laufen und habe auch keine Idee, wie ich den Tag und Nacht Fall bei Code: else ![]() |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste