millis (); nacheinander...
|
24.01.2021, 19:59
Beitrag #9
|
|||
|
|||
RE: millis (); nacheinander...
Die for-Schleifen gehören da nicht hin. Jedesmal, wenn die Zeit abläuft musst Du den Zähler um 1 erhöhen.
Gruß, Franz-Peter |
|||
24.01.2021, 20:33
Beitrag #10
|
|||
|
|||
RE: millis (); nacheinander... | |||
24.01.2021, 21:52
Beitrag #11
|
|||
|
|||
RE: millis (); nacheinander...
(24.01.2021 19:59)MicroBahner schrieb: Die for-Schleifen gehören da nicht hin. Ich rate jetzt: ![]() Zitat:Jedesmal, wenn die Zeit abläuft musst Du den Zähler um 1 erhöhen. In Verbindung mit @Jan`s erneuter Wiederholung glaube ich zu ahnen wo ihr mich hinführen wollt: Es gibt (wie auch immer) nur ein millis() das immer wieder bis fünf Sekunden hoch zählt. Beim erreichen der 5. Sekunde wird der Zähler um 1 erhöht. Erneuter millis() Durchlauf -> wieder um 1 erhöht und noch einmal bis ich beim Zählerstand "3" angekommen bin. Dann wird der Zähler auf "0" gesetzt und alles beginnt von vorn. Gleichzeitig wird der Zählerstand abgefragt. Bei 1 erfolgt der erste Funktionsaufruf, bei 2 der zweite usw. Soweit habe ich das verstanden, nur kriege ich das programmiertechnisch nicht umgesetzt. Meine einfacher "Versuchsaufbau" dazu mit dem seriellen Monitor druckt den Zaehler 1/2/3 immer gleichzeit auf den Monitor und nicht im Abstand von 5 Sekunden. Was weiß ich noch nicht? ;-) Danke erst mal, Code: unsigned long Timer = 0; bis dann, Steinspiel |
|||
24.01.2021, 22:05
Beitrag #12
|
|||
|
|||
RE: millis (); nacheinander...
(24.01.2021 21:52)Steinspiel schrieb: Ich rate jetzt:Nein, die for-Schleifen gehören ganz weg. Die bringen nur alles durcheinander. (24.01.2021 21:52)Steinspiel schrieb: Es gibt (wie auch immer) nur ein millis() das immer wieder bis fünf Sekunden hoch zählt. Beim erreichen der 5. Sekunde wird der Zähler um 1 erhöht. Erneuter millis() Durchlauf -> wieder um 1 erhöht und noch einmal bis ich beim Zählerstand "3" angekommen bin. Dann wird der Zähler auf "0" gesetzt und alles beginnt von vorn.Das ist der richtige Ansatz. In der millis-Abfrage musst Du hochzählen. Die for-Schleifen stören nur. (24.01.2021 21:52)Steinspiel schrieb: Meine einfacher "Versuchsaufbau" dazu mit dem seriellen Monitor druckt den Zaehler 1/2/3 immer gleichzeit auf den Monitor und nicht im Abstand von 5 Sekunden.Das liegt an den for-Schleifen, die weg müssen. Die zählen ohne Zeitverzögerungen hoch. Gruß, Franz-Peter |
|||
24.01.2021, 22:17
Beitrag #13
|
|||
|
|||
RE: millis (); nacheinander...
Und ändere bitte in den if-Abfragen die '=' in '==' (Stichwort: Vergleichsoperator in der Arduino-Referenz), sonst suchst Du Dir nachher einen Wolf bei merkwürdigem Verhalten.
Aber Du bist schon dicht dran ![]() |
|||
25.01.2021, 20:06
Beitrag #14
|
|||
|
|||
RE: millis (); nacheinander...
Hiho, bin neu da und dein thread war das erste wa sich gestern gefunden habe - eigentlich war ich auf der suche nach einer Lösung für mein Problem. Nun musste ich aber anscheinend 2 Tage warten bis ich Antworten darf...
naja wie dem auch sei mit millis() habe ich mich bereist viel gespielt daher dachte ich ich kann dir - als auch noch lernender - helfen. In deinem ersten Sketch führt du alle 5 Sekunden eine Prozedur durch. Da du immer genau 5 Sekunden Abstände zwischen den 3 unterschiedlichen Prozeduren gewählt hast tritt immer nur der erste auf weil er vor den anderen liegt. 5,10,15... nach 5 sekunden wird der erste aufgerufen nach weiteren 5 sekunden sind 10 sekunden erreicht und du hättest gern, dass Prozedur 2 aufgerufen wird. nur nach 5 Sekunden sind nicht nur 10 sekunden vergangen sondern erneut 5 Sekunden Also es wird immer bei 5 Sekunden triggern. Weiters ist auch relevant wie lange eine der Prozeduren anzeigt - das musst du mit einberechnen. Eine schnelle Lösung wäre andere Zeiten zu wählen. z.B.: 5s, 7s, 9s allerdings würde dann erneut bei sekunde 10 der erste auslösen. Die Herangehensweise aus deinem Sketch ist - so sehe das zumindest ich - gut wenn man Hintergundprozesse zu bestimmten Zeiten aufrufen will wenn es nicht darum geht wie lange in welchen abständen etwas dem User angezeigt wird. Besser wäre eventuell etwas mit einem Int-Zähler. Wie es eh schon erwähnt wurde. Du kannst natürlich auch mit schleifen arbeiten dass die schleife solange aktiv bleib bis die zeit erreicht ist damit lässt sich auch viel machen. Bei folgendem bleibt auch jede anzeige 5 Sekunden (wenn ich mich nicht verschaut habe) Code: do { Oder mit einer "check" Variable Code: setup() sodala ich hoffe mein code funktioniert auch hahaha ![]() |
|||
25.01.2021, 20:35
Beitrag #15
|
|||
|
|||
RE: millis (); nacheinander...
Zu Deiner do... Variante: Du hast schon eine Schleife: loop. mehr brauchst Du nicht.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
25.01.2021, 20:47
Beitrag #16
|
|||
|
|||
RE: millis (); nacheinander...
Moin,
(24.01.2021 22:05)MicroBahner schrieb: [...] Wie Du unten siehst, sind sie das jetzt auch... Ich habe es verstanden und eigentlich ist das voll logisch was ich da mit eurer Anleitung gemacht habe. ![]() Danke für Deine Hilfe, ach ja, die Displayanzeige mit meinen Umweltwerten wechselt seit geraumer Zeit vor sich in, so wie ich es wollte! ![]() bis dann, Steinspiel |
|||
|
|
Möglicherweise verwandte Themen... | |||||
Thema: | Verfasser | Antworten: | Ansichten: | Letzter Beitrag | |
![]() |
Frage zu Millis im Loop - ESP32 | Stargazer | 5 | 1.064 |
27.12.2020 06:41 Letzter Beitrag: N1d45 |
Ticker.h und millis() | miq19 | 6 | 713 |
15.12.2020 12:26 Letzter Beitrag: miq19 |
|
millis vs delay | rev.antun | 15 | 2.823 |
04.05.2020 23:47 Letzter Beitrag: rev.antun |
|
Kriege keinen Intervall mit millis() hin, | gutschy | 12 | 3.812 |
16.09.2019 15:30 Letzter Beitrag: Fips |
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste