Einen Pin für xx Sekunden schalten

Hallo,
ich möchte einen Pin für xx Sekunden schalten. In einem Menü wird der Wert in die Variable M1_DMDauer geschrieben. (im Beispiel 5)

Habe es mit folgendem Versucht:

const int M1_DMDauer =5
const int M1_DMEnde = M1_DMStart.sec + M1_DMDauer ;

if (lTime > (M1_DMStart.hour * HOUR + M1_DMStart.min * MINUTE + M1_DMStart.sec) && lTime < (M1_DMStart.hour * HOUR + M1_DMStart.min * MINUTE + M1_DMEnde ))
{
digitalWrite(M1_MENUDMPORT, HIGH);

}
else
{
digitalWrite(M1_MENUDMPORT, LOW);
}

Leider klappt das so nicht. Wie kann ich die eingestellte Dauer zu den Startzeit Sekunden aufaddieren?

Warum benutzt du nicht einfach die delay(ms)-Funktion?

digitalWrite (pin, HIGH);
delay (500); // 500 ms
digitalWrite (pin, LOW);

Warix: Leider klappt das so nicht. Wie kann ich die eingestellte Dauer zu den Startzeit Sekunden aufaddieren?

Leider verrätst Du an keiner Stelle, was "lTime" ist und wie "HOUR" und "MINUTE" bei Dir definiert sind.

Deine Frage lautet also eigentlich: "Ich vergleiche irgendwas mit irgendwas anderem und es klappt nicht".

Die passende Antwort auf so eine Frage lautet dann wohl:

Mache es doch einfach anders, damit es klappt!

@jurs Sorry hatte ich vergessen.

const long HOUR = 60 * 60; const long MINUTE = 60; lTime = (time.hour * HOUR) + (time.min * MINUTE) + time.sec

Die Zeit wird aus einem RTC Modul ausgelesen.

@ixde delay wollte ich, wenn möglich, vermeiden.

Vielleicht hilft dieses weiter: http://forum.arduino.cc/index.php?topic=68195.0 Auf Seite 2 gibts 2 Möglichkeiten.

Dies könnte auch hilfreich sein: http://forum.arduino.cc/index.php?topic=165552.0

Da fällt mir jetzt erstmal nur folgendes auf:

Du schreibst zwar, dass die Dauer aus einem Menü kommt, tatsächlich ist die Dauer als Konstante definiert:
const int M1_DMDauer =5

Ich sehe nicht, wo diese Konstante definiert ist, aber wenn es eine globale Konstante ist, die am Anfang des Sketches deklariert wird, dann ist zu dem Zeitpunkt M1_DMStart.sec wohl immer 0 und demzufolge hat die Konstante M1_DMEnde immer den Wert 5.

Der Vergleich:
if (lTime > (M1_DMStart.hour * HOUR + M1_DMStart.min * MINUTE + M1_DMStart.sec) && lTime < (M1_DMStart.hour * HOUR + M1_DMStart.min * MINUTE + M1_DMEnde ))

kann demzufolge überhaupt nur dann erfüllt sein, wenn M1_DMStart.sec kleiner als 5 (also M1_DMEnde) ist.
Mit M1_DMStart.sec und den Startwerten 0, 1, 2, 3, 4 beträgt die Einschaltzeit 5, 4, 3, 2, 1 Sekunde.
Mit M1_DMStart.sec im Bereich 5…59 wird nichts mehr geschaltet.

Wenn die Logik so ist, dass der Schaltvorgang immer beim Umspringen auf eine neue volle Minute durchgeführt werden soll, müßte es eigentlich funktionieren.

Wenn die Logik aber so ist, dass auf Knopfdruck oder bei Über-/Unterschreiten bestimmter Sensorwerte geschaltet werden soll, wird es meistens schiefgehen (in 95% aller Fälle).

Wieso gibt es im Sketch und im Vergleich überhaupt die Konstante “M1_DMEnde”, die bei der Deklaration der Konstanten festgelegt wird?
Warum schreibst Du im Vergleich statt “M1_DMEnde” nicht “M1_DMStart.sec + M1_DMDauer”?

Habe den Fehler gefunden. Die Variable M1_DMDauer stand als time M1_DMDauer im Sketch. habe es abgeändert auf int M1_DMDauer =5. Jatz kann ich damit auch arbeiten. Ist schon nicht einfach als Laie einen Sketch umzuschreiben. Aber langsam komme ich dahinter.