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?
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().
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);
}
}
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)
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.