heike schrieb:
> Ich hatte erwartet das dieser Sketch die Var. von 0-3 Sek. laufen lässt
> und dass sich immer wiederholt?!
millis() zählt nicht nur von 0-3000.
Du musst relative Zeitmessungen also einen Startzeitpunkt nehmen
(t_start), und dann diesen Startzeitpunkt von der aktuellen Zeit (t_now)
abziehen.
Wenn du bei 3 Sekunden angelangt bis, schiebst du den Startzeitpunkt um
3 Sekunden nach vorne, und bist dadurch wieder auf 0.
Dein delay(1000) ist nicht besonders günstig, denn durch die
Ausführungszeit der restlichen Instruktionen vor dem delay() wird
insgesamt immer etwas mehr als 1000 ms vergehen, deine Ausgabe ist also
etwas langsamer als 1x pro Sekunde.
Deswegen ist folgende Vorgehensweise besser:
Du bastelst dir eine Zeitmessung für genau 1 Sekunde, und zählst dann
einen weiteren Zähler von 0..2 hoch.
1 | unsigned long t_now;
|
2 | unsigned long t_start;
|
3 | unsigned long t_delta;
|
4 | int seconds = 0;
|
5 |
|
6 | void setup()
|
7 | {
|
8 | t_start = millis();
|
9 | }
|
10 |
|
11 | void loop()
|
12 | {
|
13 | t_now = millis();
|
14 | t_delta = t_now - t_start;
|
15 |
|
16 | if (t_delta >= 1000) // 1 second has passed
|
17 | {
|
18 | t_start += 1000;
|
19 |
|
20 | seconds += 1; // could also be 1000 for counting in milliseconds
|
21 | if (seconds >= 3) // could also be 3000 for counting in milliseconds
|
22 | seconds = 0;
|
23 |
|
24 | Serial.println(seconds);
|
25 | }
|
26 | }
|
Patrick J. schrieb:
> Bitte jetzt nicht schlagen, aber wie funktioniert dieses Programm?
> Wenn setup() und loop() Funktionen sind, passiert da doch akut ...
> Nichts.
Das ist eine Besonderheit der Arduino "Sketches".
Es fehlt im Prinzip dieser Code hier:
1 | main()
|
2 | {
|
3 | setup();
|
4 | while(1)
|
5 | {
|
6 | loop();
|
7 | }
|
8 | }
|
wobei die Variablen in loop glaube ich alle static werden. Frag mich
nicht, mit welcher Schweinerei das erreicht wurde.
Ich hatte so einen Arduino noch nie in der Hand, aber hier kommen
inzwischen so viele Fragen dazu, dass man das einfach mal so akzeptiert
;-)
Ach ne, die Variablen in loop() sind nicht static. main() kann man sich
hier angucken:
https://github.com/arduino/Arduino/blob/master/hardware/arduino/avr/cores/arduino/main.cpp