Arduino: Einstellbaren Impuls ausgeben

Gast #5867845
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.
#5867891
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.
Gast #5867898
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
}
Gast #5868092
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren