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
  4 mal Blink ohne Delay Blende8 2 116 Gestern 18:36
Letzter Beitrag: Blende8
  von delay auf millis umgestellt, klappt nur nicht. Servo Geschwindigkeit einstellen. gutschy 8 332 21.02.2021 15:22
Letzter Beitrag: gutschy
  Frage zu Delay-Alternative Holzwurm56 13 748 24.01.2021 21:55
Letzter Beitrag: Franz54
  Weiches Auf- und Abblenden mit delay vs millis() do1xxy 24 1.127 23.12.2020 14:45
Letzter Beitrag: Franz54
  Servos ohne delay juergen001 23 1.980 30.10.2020 16:49
Letzter Beitrag: MicroBahner
  Probleme mit millis(); timer basteldin 3 744 01.09.2020 19:04
Letzter Beitrag: basteldin
  millis Schleife bleibt hängen Cubicany 10 1.590 28.06.2020 18:39
Letzter Beitrag: Tommy56
  Fehler bei delay über 32767 Kleingärtner 5 1.025 07.05.2020 18:51
Letzter Beitrag: Kleingärtner
  Hilfe Millis treibt mich in den Wahnsinn Nefrett 17 2.392 04.05.2020 20:53
Letzter Beitrag: Tommy56
  Wie bekomme ich DIESES Delay weg. DO3GE 9 1.536 18.04.2020 12:44
Letzter Beitrag: Fips

Gehe zu:


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