Go Down

Topic: SimpleTimer class -> timer mehrfach von Hand starten und ein mal durchlaufen (Read 564 times) previous topic - next topic

iamable

Hallo ich versteh die SimpleTimer nicht so ganz

was ich möchte:

einen Timer von 2 sekunden manuell starten und bei ablauf des Timers eine Funktion auslösen

Diesen Timer von 2 sekunden möchte ich jedoch öfter mal auslösen.

was ich habe:

Code: [Select]
SimpleTimer animationFinishedTimer;
Code: [Select]
startAnimationFinishedTimer();
Code: [Select]
void startAnimationFinishedTimer()
{
  Serial.println("start timer");
 
  timerStarted = true;
   
  animationFinishedTimer.setTimeout(500, sendAnimationFinished);
  animationFinishedTimer.run();
}

Code: [Select]
void sendAnimationFinished()
{
  Serial.println("animation finished");
}


iregdnwas klappt da aber nicht....beim ersten mal wird sendAnimationFinished() gar nicht aufgerufen und danach dann sofort beim run() und nicht mit der 500 ms verzögerung.

kann mir da jemand helfen?

achso und ganz wichtig: der timer muss abzubrechen sein und neu zu starten sein

pylon

Für Deinen Timer brauchst Du die internen Hardware-Timer nicht, die sind für viel kürzere Abstände gedacht. Speichere einfach die Zeit beim Starten des Timers und überprüfe bei jedem loop()-Durchgang, ob die 2 Sekunden schon abgelaufen sind. Das kannst Du mit beliebig (sofern das RAM reicht) vielen Timern machen.

Dein Beispiel könnte schiefgehen, weil Du innerhalb des Interrupt-Handlers (was bei den Timern nach Ablauf aufgerufen wird), Ausgaben auf die serielle Schnittstelle nicht erlaubt sind.


Go Up