Intervalschaltung - alle X Minuten für Y Sekunden ein

Hallo

Ich würde gerne eine Intervalschaltung machen, in der ich alle 10 Min ein Relais für 40 Sekunden schalten lasse,
der restliche Code müsste aber weiterlaufen, also ohne delay().
Gibts hierfür eine Erleichterung (Library), oder muss alles mit millis() programiert werden?

Danke, Lons

lons:
Ich würde gerne eine Intervalschaltung machen, in der ich alle 10 Min ein Relais für 40 Sekunden schalten lasse,
der restliche Code müsste aber weiterlaufen, also ohne delay().

Manche Themen kommen hier im Forum gefühlt jede Woche einmal vor.
http://forum.arduino.cc/index.php?topic=224649.0

das kannst du alles mit millis() machen.
Am besten in eine Funktion packen.

void loop(){ 
 RelaisTakt(10000,2000);   // alle 10sek für 2sek an.
}

/*************************************************************************
** Funktion RelaisTakt
** Steuert alle [Intervall] ms einen Pin für die [Dauer] ms an.
****************************************************************************/
void RelaisTakt (unsigned long Intervall, unsigned long Dauer){
  static unsigned long tEin;
  if (millis() - tEin > Intervall){    // Abfragen, ob Zeit zum Einschalten erreicht
    digitalWrite(Pin, HIGH);
    tEin = millis();   // Zeit merken, an der Eingeschaltet wurde.
  }
  if (millis() - tEin > Dauer){       // Anfragen, ob Zeit zum Abschalten erreicht
    digitalWrite(Pin, LOW);
  }
}
1 Like

jurs:
Manche Themen kommen hier im Forum gefühlt jede Woche einmal vor.
Eine if Schleife nur alle 5 Minuten durchlaufen - Deutsch - Arduino Forum

Gefühlt? Denke, sogar deutlich mehr. Hab ohne groß suchen 2 Threads in den letzten 10 Tagen gefunden. Und das sind nicht alle Threads, da in den meisten Thread dann erst später rauskommt, dass die sowas machen müssen xD

@Gunther, sieht soweit ganz gut aus. Aber wenn die Funktion ein 2.Mal mit anderen Parametern aufgerufen wird, dürfte es Probleme geben, dass die Zeiten nicht passen. Für den TE sollte es aber reichen, wenn er darauf ein RelaisTakt1, .... RelaisTaktn macht

sschultewolter:
@Gunther, sieht soweit ganz gut aus. Aber wenn die Funktion ein 2.Mal mit anderen Parametern aufgerufen wird, dürfte es Probleme geben, dass die Zeiten nicht passen. Für den TE sollte es aber reichen, wenn er darauf ein RelaisTakt1, .... RelaisTaktn macht

Richtig.
die Funktion ist für nur 1 Relais.
Ich wollte es so einfach wie möglich halten, um das Prinzip klar zu machen.

Danke für die schnelle Hilfe.
Leider bin ich beim Arduino Programieren noch im einlesen und lernen.
Ich muss aber dazu sagen das ich die ersten 40 Seiten der deutschen Rubrik durchgesehen habe und
in meinen ungeschulten Augen leider nichts vergleichbares gefunden hatte. (Wobei ich natürlich nicht jeden Threat vollständig gelesen habe)

Danke, Lons

Welche 40 Seiten? Arduino Playground?

Das Playground ist leider mehr oder weniger nur ins deutsche übersetzt worden.

Das mM nach wichtigste Tutorial, wenn man neu anfängt. Je eher man verinnerlicht, welche Vorteil millis() gegenüber delay() hat, desto besser.

Leider gehen nicht alle Bücher auf dieses Thema ein. Je nach dem, was du weiterhin mit dem Arduino vorhast, ist ein Buch, was du in den Händen halten kannst, nicht die schlechteste Investition.

Für das Vorhaben wäre dies am einfachsten:
http://www.google.de/imgres?sa=X&espvd=210&es_sm=91&biw=1920&bih=908&tbm=isch&tbnid=sUM3xhWZwJdSiM%3A&imgrefurl=http%3A%2F%2Fwww.zooprofi.de%2Fproduct_info.php%3Finfo%3Dp10616_Reptiland_Digitale_Zeitschaltuhr_mit_Sekundenfunktion.html&docid=RJa2Cb4-DzFCkM&imgurl=http%3A%2F%2Fwww.zooprofi.de%2Fimages%2Fproduct_images%2Foriginal_images%2F10616_0.jpg&w=568&h=568&ei=5TwoU8OmF-G64AT-qYC4BA&zoom=1&iact=rc&dur=569&page=1&start=0&ndsp=55&ved=0CFcQrQMwAA