TimerThree - Interrupt Problem

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;
}

Welchen Arduino hast Du?
Grüße Uwe

Ich habe einen arduino atmega 2560.

Danke, hab es hinbekommen.

Schön daß ich mit meiner Antwort helfen konnte. :wink: :wink: :wink: :wink:
Grüße Uwe

Wobei ein Timer hier eigentlich Overkill ist. Das kann man auch mit millis() erschlagen.