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
30.03.2020, 18:47
Beitrag #17
RE: delay-millis()-while-Sensorenabfrage
Immer noch x mal "previousMillis" im Sketch.
Das funktioniert so nicht.

Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 19:13 (Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2020 19:14 von Tommy56.)
Beitrag #18
RE: delay-millis()-while-Sensorenabfrage
@TO: Sollte da nicht verzoegerung1 hin?
Code:
if (aktMillis - previousMillis1 > verzoegerung)

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, 19:48
Beitrag #19
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 19:13)Tommy56 schrieb:  @TO: Sollte da nicht verzoegerung1 hin?
Code:
if (aktMillis - previousMillis1 > verzoegerung)

Gruß Tommy

Verzoegerung1 ist nur bei der Abfrage des zaehlers ( bouncing)

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 19:50
Beitrag #20
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 18:47)Fips schrieb:  Immer noch x mal "previousMillis" im Sketch.
Das funktioniert so nicht.

Gruß Fips

Ja , das stimmt. Das programm , ohne den Bereich um Ledpin 2, läuft aber ohne probleme

Mit freundlichen Grüßen
Norbert
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2020, 20:08 (Dieser Beitrag wurde zuletzt bearbeitet: 30.03.2020 20:11 von Tommy56.)
Beitrag #21
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 19:48)RCudino schrieb:  
(30.03.2020 19:13)Tommy56 schrieb:  @TO: Sollte da nicht verzoegerung1 hin?
Code:
if (aktMillis - previousMillis1 > verzoegerung)

Gruß Tommy

Verzoegerung1 ist nur bei der Abfrage des zaehlers ( bouncing)
OK, soviel zur Sinnhaftigkeit von Ziffern an Variablennamen.
Da in Deinem Code jegliche Kommentare fehlen, was wo passieren soll, wirst Du wohl allein Deine Probleme lösen müssen. Das wird mir zu aufwändig, mich da durchzusuchen.

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, 20:23
Beitrag #22
RE: delay-millis()-while-Sensorenabfrage
(30.03.2020 19:50)RCudino schrieb:  Ja , das stimmt. Das programm , ohne den Bereich um Ledpin 2, läuft aber ohne probleme

Wenn du denkst, das Glück und Zufall zu einem prozesssicheren Ablauf führen, dann möchte ich dir nicht mehr rein reden.

Viel Glück weiterhin!


Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.04.2020, 06:46
Beitrag #23
RE: delay-millis()-while-Sensorenabfrage
Moin zusammen, habe an dem code noch weiter gearbeitet und bin zu folgender Lösung gekommen:

Code:
#include <Bounce2.h>
Bounce debouncer = Bounce();
int ReedState = 0;
bool startet = false;
bool startet1 = false;
int Reed = 2;                   // Taster an pin 2 angeschlossen
int lastButtonState = 0;
int ledPin = 13;                // Led an Pin 13
int ledPin2 = 11;               // Led2 an Pin 11
int zaehler = 0;                // continuierlicher Zähler
int x = 0;
unsigned long previousMillis = 0;
unsigned long previousMillis1 = 0;
//unsigned long previousMillis2 = 0;
//unsigned long previousMillis3 = 0;
unsigned long aktMillis = 0;
int verzoegerungledPin = 2000;   // Zeit für ledPin , wenn HIGH
int verzoegerungzaehler = 10;    // Verzögerungszeit am Zähler
int verzoegerungledPin2 = 6000;  // Zeit für ledPin2, wenn HIGH

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();   // Abfrage des Inputs mit debouncing
  if (ReedState != lastButtonState) {
    if (ReedState == HIGH) {
      startet = true;
      previousMillis = aktMillis;  // jetziger Zeitstempel
    }
    lastButtonState = ReedState;
  }
  if (startet && aktMillis  - previousMillis >= verzoegerungzaehler) {
    previousMillis = aktMillis;    // abgelaufende Zeit > verzoegerungzaehler
    zaehler ++;                    // zaehler wird erhöht
    startet = false;
    Serial.println(zaehler);
  }
  if ( ReedState == HIGH && zaehler == 5 && x == 0) { // Wenn zaehler = 5, dann LED HIGH
    digitalWrite( ledPin, HIGH);
    if (aktMillis - previousMillis > verzoegerungledPin) { //Timing 2s
      previousMillis = aktMillis;
      digitalWrite ( ledPin, LOW);    // danach LED aus
      x = 1;
    }
    digitalWrite ( ledPin2, HIGH);    // 2te LED wird angschaltet
    startet1 = true;                  // Abfrage innerhalb der if Schleife
  }
  if (startet1 && aktMillis - previousMillis1 >= verzoegerungledPin2) {
    previousMillis1 = aktMillis;      // timing 6s
    digitalWrite ( ledPin2, LOW);
    startet1 = false;
  }
  if ( ReedState == HIGH && zaehler == 10 && x == 1) {  // nächste Abfrage,
    digitalWrite( ledPin, HIGH);// ledpin wird wieder auf HIGH gesetzt , wenn zähler = 10
    if (aktMillis - previousMillis > verzoegerungledPin) {  // timing wieder 2s
      previousMillis  = aktMillis;
      digitalWrite ( ledPin, LOW);
      x = 2;

    }
  }
}

Der code macht bzw soll folgendes durchführen:
- Abfrage des tasters über debouncing
- bei zähler = 5 soll ledpin für 2s auf HIGH gehen
- innerhalb dieser Abfrage soll ledpin2 für 6s auf HIGH gehen
- bei zähler = 10 soll ledpin für 2s wieder auf HIGH gehen

Der Ablauf ist soweit ok und ich habe auch die Zeiten nachgemessen.
In der Abfrage von ledpin2 habe ich " previousMillis1" eingesetzt, da sich sonst das timing von 6s auf 8s erhöht hätte.
Bei allen anderen Abfragen habe ich" previousMillis" beibehalten. Nach einer Änderung war der Ablauf sonst nicht mehr gegeben.
Für mich war ja die Frage: Wie bekomme ich in einer if Abfrage eine 2te abfrage mit millis timing
Ich hoffe , ich habe das Problem einigermaßen richtig gelöst.

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.996 29.11.2019 16:34
Letzter Beitrag: Tommy56

Gehe zu:


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