Hi,
ich versuche mich grade an der Timer1-Bibliothek für Arduino (
http://playground.arduino.cc/Code/Timer1 ) und versteh einfach nicht,
wie das funktionieren soll. Gegeben sei folgendes Testprogrämmchen:
1 | #include "TimerOne.h"
|
2 |
|
3 | #define LED 8
|
4 | #define SECOND 1000000
|
5 |
|
6 | volatile int exited = 0;
|
7 |
|
8 | void setup(){
|
9 | pinMode(LED, OUTPUT);
|
10 | }
|
11 |
|
12 | void loop(){
|
13 | if (!exited) {
|
14 | unsigned long timeSinceStart = millis();
|
15 | unsigned long fiveSeconds = 5000UL;
|
16 | if (timeSinceStart >= fiveSeconds) {
|
17 | Timer1.initialize(8*SECOND);
|
18 | Timer1.attachInterrupt(toggle);
|
19 | exited = 1;
|
20 | }
|
21 | }
|
22 | }
|
23 |
|
24 | void toggle(){
|
25 | digitalWrite(LED, digitalRead(LED) ^ 1);
|
26 | }
|
Ich würde mir erwarten, dass folgendes passiert: Nach 5 Sekunden wird
der Timer1-Zähler gestartet und nach 13 (=5+8) Sekunden wird die LED zum
1. Mal getogglet; danach wird alle weiteren 8 Sekunden getogglet.
Es passiert aber: Nach 5 Sekunden wird sofort getogglet und danach
alle weiteren 8 Sekunden.
Wieso wird der Interrupt offenbar gleich ausgelöst, anstatt die ersten 8
Sekunden abzuwarten? Ist das so gewollt? Wenn nicht, was mach ich
falsch? Wenn schon, wie kann ich ihm abgewöhnen, dass er den 1.
Interrupt sofort auslöst?
Danke für jeden Hinweis
Tom