Arduino: Einstellbaren Impuls ausgeben

Gast #5867845
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
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
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 #5867910
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!
Gast #5868092
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

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.