Forum: Mikrocontroller und Digitale Elektronik Arduino: Einstellbaren Impuls ausgeben


von März (Gast)


Lesenswert?

Hallo Leute,

Ich will auf einem Arduino folgende Aktion ausführen:
Wenn ein Ereigniss ausgelöst wird z.bsp. Taster o.ä., soll
ein Ausgang für eine eisntellbare Zeit gesetzt werden.

Leider habe ich gerade keinen Arduino mehr (falsche Spannung am falschen 
Pin :-O )
und kann daher nicht herumexperimentieren.

Wird das funktionieren?

Deklarationen:
1
const word ImpulseTime = 500; //Impulszeit in Millisekunden           
2
int AUSGANG_pin = 5;
3
unsigned long PreviousMillis = 0;

In der loop:
1
if ("Ereigniss" and !digitalRead(AUSGANG_pin)){  
2
// Starte Impulszeit. Nicht Ausgangpin soll garantieren, das der Impuls beim ersten Ereigniss auslöst.
3
digitalWrite(AUSGANG_pin, HIGH);
4
PreviousMillis = millis();
5
}
6
7
if (millis() - PreviousMillis >= ImpulseTime){  // Zeit für Impuls abgelaufen
8
  digitalWrite(AUSGANG_pin, LOW);
9
}

Ich habe Angst, das das Zurücksetzen beim Überlauf von millis() noch 
einmal gesetzt wird.

: Verschoben durch User
von März (Gast)


Lesenswert?

Habe meine Frage im Arduino Forum gestellt.
Ich glaube sie ist dort besser aufgehoben:
https://forum.arduino.cc/index.php?topic=620120.0

von N. M. (mani)


Lesenswert?

Ich hätte als erstes Mal den Taster entprellt.
Sobald der entprellt Taster den gewünschten Zustand meldet, hätte ich 
den Ausgang gesetzt und einen Timer mit after(time,Fallback) gesetzt.
Wenn die gewünschte Zeit abgelaufen ist wird der Callback aufgerufen und 
der Ausgang zurück gesetzt.

von TotoMitHarry (Gast)


Lesenswert?

Wenn Ereignis nicht woanders zurückgesetzt wird kann man das so machen, 
ist dann gleichzeitig entprellt.
1
if (Ereignis){  
2
digitalWrite(AUSGANG_pin, HIGH);
3
PreviousMillis = millis();
4
}else digitalWrite(AUSGANG_pin, LOW);
5
6
if (millis() - PreviousMillis >= ImpulseTime){
7
Ereignis=false;
8
}

von März (Gast)


Lesenswert?

Mir macht folgendes Kopfweh:
1
if (millis() - PreviousMillis >= ImpulseTime)

Wenn millis() überläuft und wieder bei 0 anfängt.
Was passiert dann, wenn millis() grösser als Impulszeit wird!

von Peter D. (peda)


Lesenswert?

März schrieb:
> Wenn millis() überläuft und wieder bei 0 anfängt.

Differenzen stimmen immer.

März schrieb:
> Was passiert dann, wenn millis() grösser als Impulszeit wird!

Nichts anderes.

: Bearbeitet durch User
von TotoMitHarry (Gast)


Lesenswert?

Hatte mich verlesen, mein Vorschlag funktioniert so nicht.

Der eigene Vorschlag ist so okay.

von Einer K. (Gast)


Lesenswert?

März schrieb:
> Was passiert dann, wenn millis() grösser als Impulszeit wird!

Peter D. schrieb:
> Differenzen stimmen immer.

Ein Überlauf wird automatisch kompensiert.
Das Verfahren funktioniert bis zu einer ImpulseTime von 49,X Tagen 
perfekt.

> const word ImpulseTime
Sollte eigentlich unsigned long sein, damit nicht Äpfel mit Birnen 
verglichen werden.
Wird aber auch so klappen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.