Arduino Programm millis () stoppen / zurücksetzten?
Hallo, ich mache gerade ein kleines Arduino Projekt. Es soll ein Reaktionstest werden. Wenn die LED leuchtet, soll Taster 1 gedrückt werden.
Wenn der Lautsprecher angeht soll Taster 2 gedrückt werden.
Wenn beides angeht, soll Taster 3 gedrückt werden.
Es soll jeweils immer die Zeit gestoppt werden. Ich mache die Stoppuhr mit dem Unterprogramm "millis ()", nur weiß ich nicht, wie millis () nach dem Drücken des RICHTIGEN Tasters gestoppt wird und für die nächste Sache wieder zurückgesetzt wird.
2 Antworten
Den Zähler kannst Du nicht anhalten.
Eigentlich schon, aber dann stoppst Du alles was diesen Zähler benutzt, also einige Funktionen haben dann Fehlfunktionen oder warten "für immer" bevor die sich beenden. Also "ganz heißes Eisen!".
Was Du machen kannst ist, einfach den Wert den das hat in eine Variable kopieren. Die Kopie bleibt dann "für immer" wie sie zum Zeitpunkt der Kopie war.
unsigned long startzeit, endzeit;
....
....
startzeit = millis(); //Startzeitpunkt erfassen
....
....
....
while (taster==1); //Endlosschleife bis Tastereingang nicht mehr HIGH ist
endzeit = millis();
....
....
....
Und "endzeit - startzeit" ist dann die Dauer zwischen starten und stoppen.
Du kannst millis() nicht stoppen oder zurück setzen. Die laufen los und laufen immer weiter, bis der Wert überläuft und von vorne beginnt. Du kannst den Wert nur zwischenspeichern und die Differenz ausrechnen lassen... Zwingend "unsigned long" für die Variable verwenden...
Wenn das Startereignis eintritt, speicherst Du den Wert in die deklarierte variable und wenn der richtige Taster gedrückt wurde, subtrahierst Du von millis() den gespeicherten Wert und hast die Zeitdifferenz in Millisekunden...
Ok, danke. Aber wie sieht der Code dafür aus?