INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
delay-millis()-while-Sensorenabfrage
23.02.2020, 15:51
Beitrag #9
RE: delay-millis()-while-Sensorenabfrage
2 Varianten:

1. mit delay
2. Wie ich Dir als Beispiel geschrieben habe, da müssen dann alle if in die Klammern der millis-Abfrage und vorher das Retriggern (prev auf Kontaktzeitpunkt).

Du kannst Dir das debounce schenken, weil nach 380 ms sollte auch der schlechteste Kontakt ausgeprellt haben.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2020, 15:28
Beitrag #10
RE: delay-millis()-while-Sensorenabfrage
Hallo tommy, hier doch noch einmal eine Rückmeldung von mir.
Dein Vorschlag wurde soweit von mir umgesetzt. Es mußte der counter ++ im Code verschoben werden. Nun funktioniert es mit millis.

Code:
bool startet = false;
void loop() {
  uint32_t aktMillis = millis();
  debouncer.update();

  ReedState = debouncer.read();
  if (ReedState != lastButtonState) {
    if (ReedState == HIGH) {
      startet = true;
      previousMillis = aktMillis;
    }
    lastButtonState = ReedState;
  }
  if (startet && aktMillis  - previousMillis >= verzoegerung) {
    previousMillis = aktMillis ;
    counter ++;
    Serial.println(counter);
    startet = false;
  }

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.03.2020, 15:30
Beitrag #11
RE: delay-millis()-while-Sensorenabfrage
Danke für die Rückmeldung.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 17:41
Beitrag #12
RE: delay-millis()-while-Sensorenabfrage
Hallo zusammen, hallo Tommy,
ich habe den Sketch noch einmal etwas erweitert. Läut soweit ohne Probleme
Mit den 2 if Abfragen schalte ich eine LED zaehlerabhängig ein und aus .
Auch ebenfalls mit millis.
Nun die Schwierigkeit: Wenn ich in einer if Abfrage eine weitere if Abfrage einbaue und die soll ebenfalls eine Zeitkomponente haben , komme ich nicht weiter.

Code:
#include <Bounce2.h>
Bounce debouncer = Bounce();
int ReedState = 0;
bool startet = false;
int Reed = 2;
int lastButtonState = 0;
int ledPin = 13;
int zaehler = 0;
int x = 0;
unsigned long previousMillis = 0;
int verzoegerung = 2000;  // Zeit für LED an
int verzoegerung1 = 200;

void setup() {
  debouncer.attach(Reed);
  debouncer.interval(2);
  Serial.begin(9600);
  pinMode(Reed, INPUT_PULLUP);
  pinMode( ledPin , OUTPUT);
}

void loop() {
  uint32_t aktMillis = millis();
  debouncer.update();

  ReedState = debouncer.read();
  if (ReedState != lastButtonState) {
    if (ReedState == HIGH) {
      startet = true;
      previousMillis = aktMillis;
    }
    lastButtonState = ReedState;
  }
  if (startet && aktMillis  - previousMillis >= verzoegerung1) {
    previousMillis = aktMillis ;
    zaehler ++;
    Serial.println(zaehler);
    startet = false;
  }
  if ( ReedState == HIGH && zaehler == 5 && x == 0) {

    digitalWrite( ledPin, HIGH);
    if (aktMillis - previousMillis > verzoegerung) {
      previousMillis = aktMillis;

      digitalWrite ( ledPin, LOW);
      x = 1;
    }
// Hier soll noch eine if abfrage rein, die auch eine Zeitkomponente hat
  }

  if ( ReedState == HIGH && zaehler == 10 && x == 1) {
    digitalWrite( ledPin, HIGH);
    if (aktMillis - previousMillis > verzoegerung) {
      previousMillis = aktMillis;
    digitalWrite ( ledPin, LOW);
      x = 2;

    }
  }
}

Muß ich millis am Anfang anders aufbauen?
Hat jemand einen Tipp?

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 17:52
Beitrag #13
RE: delay-millis()-while-Sensorenabfrage
Wenn Du sagst, wo im Code das Problem ist, müssen wir nicht suchen, was Du meinen könntest.
Mehrere Zeiten brauchen auch mehrere prevMillis - evtl. war es das?

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 18:15
Beitrag #14
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 17:52)Tommy56 schrieb:  Wenn Du sagst, wo im Code das Problem ist, müssen wir nicht suchen, was Du meinen könntest.
Mehrere Zeiten brauchen auch mehrere prevMillis - evtl. war es das?

Gruß Tommy

Haben den code wie folgt ergänzt , da wo ich geschrieben habe
Code:
aktMillis = previousMillis1;
    digitalWrite ( ledPin2, HIGH);
    if (aktMillis - previousMillis1 > verzoegerung) {
      previousMillis1 = aktMillis;
      digitalWrite ( ledPin2, LOW);

ledpin2 und previousMillis1 wurden im code ergänzt.
Das Programm läuft so wievor ab. Die ledpin2 geht bei zaehler 5 auch an , aber nicht wieder aus.

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 18:29
Beitrag #15
RE: delay-millis()-while-Sensorenabfrage
Schön und Du meinst jetzt, wir nehmen uns beide Codes, suchen die Stelle und bauen das ein, um zu sehen, was Du willst?

Vergiss es. Wenn ich mir etwas anschauen soll, dann stelle es so komplett ein, dass ich es sehen kann und markiere die Stelle.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 18:40
Beitrag #16
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 18:29)Tommy56 schrieb:  Schön und Du meinst jetzt, wir nehmen uns beide Codes, suchen die Stelle und bauen das ein, um zu sehen, was Du willst?

Vergiss es. Wenn ich mir etwas anschauen soll, dann stelle es so komplett ein, dass ich es sehen kann und markiere die Stelle.

Gruß Tommy

Sorry, der code komplett
Code:
#include <Bounce2.h>
Bounce debouncer = Bounce();
int ReedState = 0;
bool startet = false;
int Reed = 2;
int lastButtonState = 0;
int ledPin = 13;
int ledPin2 = 11;
int zaehler = 0;
int x = 0;
unsigned long previousMillis = 0;
unsigned long previousMillis1 = 0;
int verzoegerung = 2000;  /7 Zeit für LED an
int verzoegerung1 = 200;

void setup() {
  debouncer.attach(Reed);
  debouncer.interval(2);
  Serial.begin(9600);
  pinMode(Reed, INPUT_PULLUP);
  pinMode( ledPin , OUTPUT);
  pinMode (ledPin2, OUTPUT);
}

void loop() {
  uint32_t aktMillis = millis();
  debouncer.update();

  ReedState = debouncer.read();
  if (ReedState != lastButtonState) {
    if (ReedState == HIGH) {
      startet = true;
      previousMillis = aktMillis;
    }
    lastButtonState = ReedState;
  }
  if (startet && aktMillis  - previousMillis >= verzoegerung1) {
    previousMillis = aktMillis ;
    zaehler ++;
    Serial.println(zaehler);
    startet = false;
  }
  if ( ReedState == HIGH && zaehler == 5 && x == 0) {

    digitalWrite( ledPin, HIGH);
    if (aktMillis - previousMillis > verzoegerung) {
      previousMillis = aktMillis;

      digitalWrite ( ledPin, LOW);
      x = 1;
    }
    aktMillis = previousMillis1;    // zusätzliche abfrage,
    digitalWrite ( ledPin2, HIGH);
    if (aktMillis - previousMillis1 > verzoegerung) {
      previousMillis1 = aktMillis;
      digitalWrite ( ledPin2, LOW);

    }
  }

  if ( ReedState == HIGH && zaehler == 10 && x == 1) {
    digitalWrite( ledPin, HIGH);
    if (aktMillis - previousMillis > verzoegerung) {
      previousMillis = aktMillis;

      digitalWrite ( ledPin, LOW);
      x = 2;

    }
  }
}

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Probleme mit millis(); timer basteldin 3 240 01.09.2020 19:04
Letzter Beitrag: basteldin
  millis Schleife bleibt hängen Cubicany 10 899 28.06.2020 18:39
Letzter Beitrag: Tommy56
  Fehler bei delay über 32767 Kleingärtner 5 588 07.05.2020 18:51
Letzter Beitrag: Kleingärtner
  Hilfe Millis treibt mich in den Wahnsinn Nefrett 17 1.538 04.05.2020 20:53
Letzter Beitrag: Tommy56
  Wie bekomme ich DIESES Delay weg. DO3GE 9 942 18.04.2020 12:44
Letzter Beitrag: Fips
  Denkanstoß gesucht - in Schrittkette delay() ersetzen SpaghettiCode 19 1.481 31.03.2020 21:31
Letzter Beitrag: MicroBahner
  for-schleife, delay, millis, interrupt Harry 8 974 31.03.2020 21:02
Letzter Beitrag: Harry
  Scrollpausen im Oled Display ohne Delay Alter Fritz 7 888 25.01.2020 13:22
Letzter Beitrag: Alter Fritz
  Sich wiederholende Intervalle ohne Delay Verzweiflung RobertLeRopp 52 4.370 17.12.2019 21:30
Letzter Beitrag: Tommy56
  Millis anstatt delay ThorstenP 25 2.995 29.11.2019 16:34
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste