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
Frage zu Millis im Loop - ESP32
21.11.2020, 14:03 (Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2020 14:04 von Stargazer.)
Beitrag #1
Smile Frage zu Millis im Loop - ESP32
Hallo Zusammen,

ich sitze immer mal wieder an einem Problem, was wahrscheinlich keines ist.
Der limitierende Faktor sitzt wahrscheinlich wieder vor dem Bildschirm. Darum wollte ich mein Problem hier einmal posten. Und zwar hatte ich mit dem ESP32 und dem BLEScan - Beispiel etwas rumgespielt und dort eine Anwesenheitserkennung mit einem G-Tag gebastelt. Dieser wird per MAC erkannt und gibt derzeit nur einen Text im seriellen Monitor aus. Später soll das vielleicht mal einen Garagentoröffner ergeben Smile.

Nun habe ich das ganze so im loop geregelt, dass er alles über die Millis - Funktion abhandelt. Ein delay kommt da nicht gut, da er später eine einfache Website anzeigen soll. Doch diese wird dann nicht mehr ordentlich aufgebaut. Darum bleibe ich bei millis. Soweit so gut.

Nun soll er, wenn er die MAC erkannt hat, eine millis - Schleife auch erst dann starten. Aber...da bin ich anscheinend zu doof zu. Hier mal der Code, worum es geht:


Code:
if (Pausenzeit == 1)

  {
    Serial.println("Pausenzeit des Scanners wird neu gesetzt......");
    


    ///////////////////////////////////////////////////////Aufenthaltspause im Schaltbereich wird festgelegt.///////////////////////////////////////////////////

    if (currentMillis - previousMillis2 > Schaltpause)
    {
      Hilfsschalter = 0;
      Serial.println("Hilfsschalter - Reset via Millis wird durchgeführt ");
      // Serial.print("Pausenzeit im if - Teil Schaltpause : ");
      Serial.println(Pausenzeit);

      previousMillis2 = currentMillis;

      char* s_pause = config.s_pause;
      interval2 = atoi(s_pause);
      Schaltpause = (interval2 * MillisFaktor);
      Pausenzeit = 0;

    }
  }

Die variable Pausenzeit wird mit dem erkennen des G-Tags auf 1 geschaltet.
Dann soll das ganze Geraffel starten. Aber nur dann. Mein Problem liegt mit dem Hauptaugenmerk auf der Pausenzeit = 0;. Diese deaktiviert die Schleife dann wieder, das ist mir bewusst. da habe ich schon irgendwie alles durchprobiert.
Entweder läuft die Schleife dann normal mit und das permanent. Oder aber nur einmal..und dann nie wieder, obwohl die variable auf 1 steht.
Die variable "Hilfsschalter" ist nur für das "wieder scharf schalten" vorgesehen.


Kann mir jemand eine Säge zu meinem Brett vor dem Kopf reichen ?

Vielen Dank an euch...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2020, 15:27
Beitrag #2
RE: Frage zu Millis im Loop - ESP32
Ohne die Deklaration der Variablen zu kennen, kann man nur raten.
Sind die beteiligten Variablen alle unsigned long?

Warum machst Du erst eine Pause, wenn Du die Pausenzeit setzen willst?
Ich verstehe Deine Logik nicht.

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.11.2020, 16:04
Beitrag #3
RE: Frage zu Millis im Loop - ESP32
Ich könnte mir vorstellen, dass die Variable, in der du die MAC zwischenspeicherst, nicht gelöscht wird und deswegen die Pausenzeit immer wieder direkt auf 1 setzt...
Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2020, 16:20
Beitrag #4
RE: Frage zu Millis im Loop - ESP32
Hi,

also...

Die variablen der Pausenzeit und der Schaltpause sind beide int.
currentMillis is eine unsigned long.

Die MAC wird zuverlässig nur einmal erkannt und auch in keiner variable übernommen.

Ich müsste eigentlich nur sehen, dass er die millis - Schleife nur einmal abarbeitet. Nämlich so lange wie Pausenzeit = 1 ist.
So die Vorstellung. Ist dann die millis - Schleife abgearbeitet, setzt sie die Pausenzeit wieder auf 0 und würde dann warten, bis
die Pausenzeit wieder 1 wird. Das wäre genau das, was ich bräuchte.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.11.2020, 16:58 (Dieser Beitrag wurde zuletzt bearbeitet: 21.11.2020 17:01 von MicroBahner.)
Beitrag #5
RE: Frage zu Millis im Loop - ESP32
(21.11.2020 16:20)Stargazer schrieb:  Ich müsste eigentlich nur sehen, dass er die millis - Schleife nur einmal abarbeitet. Nämlich so lange wie Pausenzeit = 1 ist.
So die Vorstellung. Ist dann die millis - Schleife abgearbeitet, setzt sie die Pausenzeit wieder auf 0 und würde dann warten, bis
die Pausenzeit wieder 1 wird.
Wo ist da eine millis Schleife? Ich sehe nur ein if. Und wenn das einmal abgearbeitet wird, wird auch 'Pausenzeit' wieder auf 0 gesetzt, und das wars dann.

Solange Du nur dieses Fragement zeigst, kann man da gar nichts weiter sagen.

Gruß, Franz-Peter
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2020, 06:41 (Dieser Beitrag wurde zuletzt bearbeitet: 27.12.2020 06:44 von N1d45.)
Beitrag #6
RE: Frage zu Millis im Loop - ESP32
(21.11.2020 14:03)Stargazer schrieb:  ...

Entweder läuft die Schleife dann normal mit und das permanent. Oder aber nur einmal..und dann nie wieder, obwohl die variable auf 1 steht.

...

Wie von anderen schon angemerkt, ist dein Code Beispiel keine Schleife. Es besteht nur aus zwei IF, also WENN -> DANN.

Vermutlich meinst du mit Schleife den gesamten LOOP Teil.

Wenn die Variable Pausenzeit den Wert 1 hat, ist die Erste Bedingung erfüllt, und der darin folgende Code wird ausgeführt.

Die Zweite Bedingung arbeitet mit einem Größenvergleich von millis und Schaltpause.


Das nicht ausführen dieser Bedingung, bedeutet das dieser Codeabschnitt entweder nie erreicht wird, da du evtl. Irgendwo anders im Code in einer Schleife hängen bleibst, oder der Vergleich der Bedingung nie wahr wird.


Daher ist der komplette Code wichtig, um nachvollziehen zu können, welchen Wert die anderen Variablen haben. Und um zu erkennen, warum du evtl. diesen Code Abschnitt nie erreichst.


Edit: Sorry, hab jetzt erst das Datum gesehen. Wollte keine Toten wecken.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  SHT30 an Wemos D1 Mini ESP32 Mirkan 6 168 Gestern 09:59
Letzter Beitrag: Mirkan
  ESP32 und sms kpc 25 906 Gestern 01:51
Letzter Beitrag: kpc
  ESP8266, Frage zu Void Loop Bobo83600 3 165 04.05.2021 17:50
Letzter Beitrag: Tommy56
  ESP32 access point: Browser Variablen einlesen FoxFactoy 1 150 03.05.2021 11:44
Letzter Beitrag: Tommy56
  ESP32 in Verbindung mit MCP23017 Kymmenen 17 552 02.05.2021 19:34
Letzter Beitrag: Tommy56
  ESP32 Flash Mode setzen Itsme 10 424 01.05.2021 20:04
Letzter Beitrag: Itsme
Question Division von millis() / 86400000 immer Null wmauss 18 1.100 26.04.2021 13:13
Letzter Beitrag: ardu_arne
  Client(ESP8266) und Webserver(ESP32) Dahabcon 14 935 25.04.2021 20:32
Letzter Beitrag: Tommy56
  TTGO ESP32 SIM800L Pinout Stromversorgung pcfritz 1 355 18.04.2021 14:40
Letzter Beitrag: hotsystems
  ESP32 Daten aus HTML Roger100499 11 936 15.04.2021 15:00
Letzter Beitrag: Tommy56

Gehe zu:


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