Timer auf Esp01 - timer0=millis

hallo miteinander

ich habe auf einen arduino uno > einen timer mit

extern volatile unsigned long timer0_millis;

stoppen können , sprich die millis sind auf null gegangen

Nun wolte ich diese variabel auch bei einem esp01 verwenden, leider existiert die nicht für esp8266

die millis laufen immer weiter - wie kriege ich die wieder auf Null

wie kann ich dieses problem lösen
Vielen dank für euren input

marc

Bitte drücke dich etwas genauer aus.
Welche Variable meinst du ?

Und es ist immer besser den Sketch von dem man spricht zu posten.
Setze den in Code-Tags, Schaltfläche </> oben links im Editorfenster.

das ist wohl war - danke :smiley:

   }

//timer 
unsigned long ontime = 45000;   
unsigned long currentMillis;
long previousMillis = 0;
extern volatile unsigned long timer0_millis;

 
      
 if .....(sind 4 regeln erfüllt starte timer - fällt eine weg stop timer -
          
currentMillis = millis();
 else 
{timer0_millis = 0; }
        
 if (currentMillis - previousMillis > ontime) {     //sind die 45 sek erfüllt starte 
      
       
           // Do what you want to do 
    
timer0_millis = 0; // setze timer auf null

Warum willst du millis zurücksetzen?

Guck dir mal das Beispiel "BlinkWithoutDelay" an: https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

testi74:
das ist wohl war - danke :slight_smile:

Ach…und jetzt ?

Ich sehe keine Erklärung und keinen Sketch.
Nur irgendwie wild zusammen gewürfelte Anweisungen.

ach und jetzt ??? …

das sind auszüge → es geht genau um das und nicht um den restlichen code

nochmal die Frage

Wie setzt man den timer wieder auf null im esp01 - (das delay beispiel ist mir bekannt - löst aber mein problem nicht)

das geht im arduino uno mit timer0_millis = 0;

  • brauche einen timer der startet wenn 4 regeln erfüllt sind
    auch wenn der timer gestartet ist fällt eine regel weg muss er auf null gehen und wieder bereit sein
    bleiben die regeln die volle definierte zeit erfüllt - geht zum bsp eine Lampe an danach geht der timer auf null und ist wieder bereit

testi74:
das sind auszüge -> es gteht genau um das und nicht um den restlichen code

Und genau ist das Problem.
Aus deinem "gewurschtel" kann ich nicht erkennen, welchen Timer du meinst.

Ich sehe nur die Variable, die du mit "0" beschreibst. Und das sollte so auch auf dem ESP funktionieren.
Aber behalte deinen Sketch gerne geheim, ich bin dann raus.

Hi

Dann will ich Mal ...

Du merkst Dir doch bereits den aktuellen Wert von millis() - weshalb willst Du jetzt am Timer rumbiegen und damit andere Seiteneffekte rein holen?
Du brauchst doch 'nur' die abgelaufene Zeit - und Das auch nur, wenn alle vier Bedingungen erfüllt sind.

If (alle vier Bedingungen) { if (Bedingungen_ok==false){ startzeit=millis();} Bedingungen_ok=true;} else { Bedingungen_ok=false;}
if (Bedingungen_ok==true && millis()-startzeit>1000){
   //Zeit ist abgelaufen (hier 1000ms)
   Bedingungen_ok=0;
}

Sollte halbwegs erkennen lassen, was ich meine.

Kleiner Tip:
Wenn Du Hilfe suchst, solltest Du nicht Allen Helfenden vor den Kopf kloppen.

MfG

Ich glaube nicht, dass du wirklich den Hardwaretimer meinst oder gar millis resetten (gaaanz schlechte Idee) willst. Schreibe doch einfach mal, was das ganze geben soll.

testi74:
hallo miteinander

ich habe auf einen arduino uno > einen timer mit

extern volatile unsigned long timer0_millis;

stoppen können , sprich die millis sind auf null gegangen

Nun wolte ich diese variabel auch bei einem esp01 verwenden, leider existiert die nicht für esp8266

die millis laufen immer weiter - wie kriege ich die wieder auf Null

wie kann ich dieses problem lösen
Vielen dank für euren input

marc

Gar nicht!
millis() funktioniert auf dem ESP gänzlich anders.

Da dein Programmdesign auf der Verwendung von timer0_millis beruht, hat es eine Abhängigkeit, welche du jetzt nicht auflösen kannst. Das Design ist kaputt.

Also, hinsetzen, und es ordentlich machen.

Ich schließe mich an, und sage auch:
timer0_millis zu manipulieren, war von Anfang an eine dumme Idee.
Und jetzt ist sie dir auf die Füße gefallen.