Timer mit Millis() als Funktion mehrfach aufrufen.

Hallo zusammen.
Ich möchte für mein Programm einen Timer mit millis() verwenden und brauche dazu mehrere verschiedene Intervalle. Die Funktion (außerhalb von loop) sieht so aus:

bool Timer(unsigned int interval)
{
  static unsigned long oldMillis;

  if (millis() - oldMillis >= interval)
  {
    oldMillis = millis();
    return true;
  }
  else
  {
    return false;
  }
}

Deklaration über Loop:

bool pulse1 = false; // Pulse for Running Light steps
unsigned int interval1 = 75; // Interval for Running Light pulsing (ms)
bool timer1 = false; // Timer for switching program 1 to another
unsigned int runtime1 = 3; // Time program 1 should run bevore switching (minutes)
bool timer2 = false; // Timer for switching a running light program to program 1
unsigned int runtime2 = 30; // Time a random running light program should run (seconds)

Aufrufe in Loop:

  pulse1 = Timer(interval1);
  timer1 = Timer(runtime1 * 60000);
  timer2 = Timer(runtime2 * 1000);

Im Moment funktioniert allerdings nur der erste Timeraufruf die anderen beiden geben nichts zurück. Was mache ich falsch?

Sorry für die Anfängerfrage, aber ich bin noch am Lernen :wink:

Mach eine Klasse daraus. Dann kannst du mehrere Ausführungen davon haben und jede hat intern ihre eigenen Variablen

Das ist übrigens falsch:

runtime1 * 60000

Das verursacht einen Überlauf. Korrekt:

bool Timer(unsigned long interval)
Timer(runtime1 * 60000UL);

Im Moment funktioniert allerdings nur der erste Timeraufruf die anderen beiden geben nichts zurück. Was mache ich falsch?

Dein "static" spuckt dir ins Essen.
Das ist eben nicht mehrfach/unabhängig vorhanden

static, geht z.B. so: INTERVAL
und ohne static so: SimpleTimer

Oder nimm meine MobaTools, da ist genau die Klasse schon drin ( der EggTimer ) :wink:

combie:
Dein "static" spuckt dir ins Essen.

Auch ohne static muss man etwas weiter ausholen. z.B. den alten Wert außerhalb verwalten und als Referenz übergeben. Oder eben gleich eine Klasse draus machen

Hab ne Klasse daraus gemacht, gar nicht so schwer ^^
Danke schön :wink: