Hallo Zusammen,
ich habe ein Problem, vielleicht auch ein Verständnisproblem, mit dem timer3 Interrupt.
In der loop soll ein timer gestartet werden, der nach einer gewissen Zeit x ein Interrupt auslöst. Mit dem Interrupt soll ein Ereignis stattfinden. Jedoch soll in dieser Zeitspanne x weiterhin der loop Programmablauf ausgeführt werden.
Im Ps ein Minimalbeispiel:
Die LED blinkt im Intervall von 250ms. Am Ende der loop wird ein timer gestartet. Nachdem 2s überschritten ist, wird der interrupt ausgelöst (in der void stop_refill(void)).
Die LED geht aus für 5s, der Status wird wieder auf "0" gesetzt und alles von neuen soll beginnen. Leider ist die LED immer aus.
Was mach ich falsch?
Ich Bitte um Eure Hilfe.
Beste Grüße Kalle
Ps. Minimalbsp.
#include <TimerThree.h>
// set pin numbers:
const int ledPin = A15; // the number of the LED pin
long time_refill;
// Variables will change:
int ledState = LOW; // ledState used to set the LED
long previousMillis = 0; // will store last time LED was updated
// the follow variables is a long because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long interval = 250; // interval at which to blink (milliseconds)
boolean state;
void setup() {
// set the digital pin as output:
pinMode(ledPin, OUTPUT);
state = 0;
// Timer initialisieren
time_refill=2000000; // Nachfüllzeit in µ-sekunden
Timer3.initialize(time_refill); // initialsiert timer3 mit der Nachfüllzeit
Timer3.attachInterrupt(stop_refill); // startet den Interrupt
Timer3.stop();
}
void loop()
{
unsigned long currentMillis = millis();
if(currentMillis - previousMillis > interval) {
// save the last time you blinked the LED
previousMillis = currentMillis;
// if the LED is off turn it on and vice-versa:
if (ledState == LOW)
ledState = HIGH;
else
ledState = LOW;
// set the LED with the ledState of the variable:
digitalWrite(ledPin, ledState);
}
if (state == 0){
Timer3.start();
}
state=1;
}
void stop_refill(void)
{
sei(); // Interrupt Enable (Notwendig für PWM und I2C)
digitalWrite(ledPin, LOW);
delay(5000);
Timer3.stop(); // Stoppt den Timer
state=0;
}