Delay ohne das Programm anzuhalten

Hallo,

ich habe mir (wie ich zugeben muss, ohne zu schauen ob es sowas schon gibt) eine tinzig-winzig-kleine Lib geschrieben, mit der man Delays ausführen kann, ohne das laufende Programm anzuhalten. Hierzu ein Beispiel:

#include <DelayTimer.h>

DelayTimer dtLed;
const int led = 13;

void setup() {
  Serial.begin(9600);  
  pinMode(led, OUTPUT);     
}

void toggleLed(void) {
  digitalWrite(led, !digitalRead(led));
  dtLed.setDelayTimer(1000);
}

void loop() {
  static long x = 0;
  static DelayTimer dtAusgabe;
  
  dtLed.onExpiration(toggleLed);
  
  if(dtAusgabe.isExpired()) {
    Serial.println(x);
    dtAusgabe.setDelayTimer(500);
  }
  
  x++;
}

Die loop()-Funktion läuft (fast - zumindest wird keine Wartepause eingelegt) ohne gebremst zu werden, x wird also kontinuierlich hochgezählt. Die LED an Pin 13 blinkt im Sekundentakt, wie im Blink-Beispiel und alle halbe Sekunde wird der Wert von x auf der seriellen Schnittstelle ausgegeben.

Mit der Lib kann man Delay-Zeiten setzen (so viele, wie Speicher vorhanden ist, sonst kein Limit), man kann über if(…) abfragen, ob eine Delay-Zeit schon abgelaufen ist oder ob die Zeit noch läuft und man kann eine Callback-Funktion (hier im Beispiel toggleLed() ) aufrufen, je nachdem ob Delay abgelaufen ist oder noch läuft.

Falls das hier für jemanden interessant wäre, würde ich es mit Erklärung zum downloaden auf meine Seite stellen und den Link hier veröffentlichen. Vielleicht fällt ja auch dem einen oder anderen noch was nützliches ein, was man dazu packen könnte.

Gruß,
Ralf

millis() bzw micros() sind Dir nicht sympatisch? :wink: :wink: :wink:
Grüße Uwe

uwefed: millis() bzw micros() sind Dir nicht sympatisch? ;) ;) ;)

Doch, das fragt sogar millis() ab. Aber immer das Gewurschtel mit "if(millis() == dieses oder jenes" ist relativ unübersichtlich finde ich. Außerdem finde ich meine Idee mit den Callback-Funktionen gut.

Gruß, Ralf

Hi Ralf,

mal wieder hat sich einer Gedanken darüber gemacht, wie die Arduino-Welt erleichtert werden kann. Nachdem ich mich von dem delay() - Befehl weitestgehend verabschiedet habe, kämpfe ich (als Anfänger) immer mit den Variablen der Intervallverarbeitung. Ein wirkliches Gewurschtel... Ich wäre sehr daran interessiert, diese Library auszuprobieren. Also ab damit in Deinen "Bastelkeller"!

Gruß Eberhard

@eberduino und Schachmann

Schaut euch mal meine Lib an. Dies ist zwar eher eine Funktionssammlung die geschickt generiert wird aber die erleichtert euch den Umgang mit millis() == ... und den ganzen globalen Variablen.

http://forum.arduino.cc/index.php?topic=165552.0

Ich war es damals auch Leid und verlor leicht die Übersicht im Programm, das ist nun nicht mehr der Fall.

Offensichtlich haben sich schon mehrere Gedanken über diverse Kleinigkeiten gemacht. (Von mir gab es auch in einem Thread mal eine WaitWithoutDelay Lib). Leider geht sowas hier komplett unter und über die Suche findet man sowas auch nicht so einfach, wenn man nicht weiss wonach man konkret suchen soll.
Wäre es evtl. möglich einen Sticky-Post mit “Common Problems & Solutions” oder (wir sprechen ja deutsch :slight_smile: “Allgemeine Probleme und Lösungen” zu haben, bei dem einzelne Posts zu gängigen Problemen angelegt werden (nur vom Moderator) und die dann jeweils mit Links zu sinnvollen und helfenden Threads ausgestattet werden.
Spontan fallen mir da

  • “delay ohne delay”
  • RTC Zeit stellen
  • Taster anschliessen und entprellen
  • Schieberegister anschliessen und abfragen / ansteuern
  • LEDs und Vorwiderstände
  • maximaler Strom von Pins, Ports und ganzen Arduinos

Ich weiss das gibt es auch im Playground, aber mal ehrlich, der ist ziemlich unübersichtlich und für einen Anfänger nicht wirklich gut geeignet. Meist werden ja eh Links zum eigenen Einlesen und Lernen gebraucht. Man kann ja durchaus auf den Playground verlinken.

Ich habe mir auch schon mal dazu gedanken gemacht: http://blog.blinkenlight.net/experiments/basic-effects/lighthouses/ und http://blog.blinkenlight.net/experiments/basic-effects/pin-debouncing/.

eberduino: Ich wäre sehr daran interessiert, diese Library auszuprobieren. Also ab damit in Deinen "Bastelkeller"!

Hallo,

schon passiert, hier der Link: http://www.elektronik-bastelkeller.de/wordpress/?p=443

Gruß, Ralf

Sehr praktisch, danke!
Ich brauch’s nach wie vor kurz und nachvollziehbar, leider wächst mein Wissensstand nicht so schnell wie meine grauen Haare :slight_smile: