microsekunden zurückstellen

Hi zusammen, ist es Möglich die Werte der micros() Funktion wieder zurück (auf 0) zu setzen ohne einen Reset des Systems?

Was ich machen will ist: Prog. läuft. Ein User drückt zu einem bestimmten Zeitpunkt einen Knopf für eine gewisse Dauer. Nach einer gewissen Zeitspanne wird das ganze wiederholt und ein LED leuchtet wieder zur selben Zeit.

Hallo Radar Du bist zuwenig verständlich für mich um diese Zeit (halb eins nachts)

zu t1 drückt jemand einen Knopf für die Dauer t2.

nach t3 soll t1 starten und danach das LEd für t3 leuchten? Hab ich das richtig verstanden?

;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;) ;)

Grüße Uwe

Definiere Dir eine long-Variable "lastTime" (oder wie auch immer) und setze sie "=millis()", wenn Du eigentlich millis() auf "0" setzen wölltest.

Wenn Du dann "millis() - lastTime" machst bekommst Du die Millisekunden seit diesem Zeitpunkt.

Entschuldige Joghurt Darf ich Dich verbessern?

@Radar Joghurt schreibt über die Funktion millis(); das selbe gilt für die Funktion micros(), nur daß die Variable schneller überläuft. Statt einer Long-Variablen ist es bessere eine unsigned long Variable zu nehmen. Grüße Uwe

Danke erstmal für die Antworten. Das auszurechnen hab ich mir auch überlegt. Das Problem ist aber, wie gesagt wurde, dass die micros() glaub nach +/-70 Minuten überlaufen. Darum die Idee mit dem zurücksetzen.

Ich versuch das Ganze noch zu illustrieren:

t1                                          t2
|-------------------------------------------|
|    |=====|       |==|    |===========|
     t3    t4      t5 t6   t7          t8
       
t1 - t2     : ist die länge des "Loops"
t3,t4,t5,t6 : User eingaben t3 = keyDown, t4 = keyUp etc.

Sollte ich das ganze vielleicht an etwas anderem als der Zeit festmachen? Sind dazu diese Interupts geeignet?

Das Problem ist aber, wie gesagt wurde, dass die micros() glaub nach +/-70 Minuten überlaufen.

Glauben ist gut für die Kirche, beim Programmieren ist Wissen besser. Du versuchst ein Problem zu lösen, das keines ist. Mache deine Abfragen einfach so (egal ob mit millis() oder micros())

[glow]unsigned long[/glow] anfang;
...
dauer = millis() - anfang;
...
if (millis() [glow]-[/glow] anfang >= mindestzeit) { ....

Wenn deine Variablen brav als unsigned long deklariert sind, dann bekommst du die korrekte Dauer durch Subtraktion heraus, egal ob ein Rollover passierte oder nicht - solange die Dauer kleiner als die Rolloverzeit (also 70 Minuten oder 49 Tage) ist. Deshalb beim Beispiel mit if immer den Anfange von millis() oder micros() abziehen und dann erst mit der gewünschten Dauer vergleichen. Machst du es anders, funktioniert dein Programm nicht, wenn gerade ein Rollover war.

Korman

@uwefed: Danke. :)

Dank geht auch an die anderen!

(bin manchmal etwas vergesslich...)