Das Vorhaben: Auf einem LCD Display sollen zwei verschiedene Zähltimer angezeigt werden, welche mit Buttons umgeschaltet werden.
Also:
Arduino starten: Noch nichts passiert.
Button1 drücken: Timer 1 startet, zählt in Sekunden hoch, Timer 2 macht noch nichts.
Button2 drücken: Timer 1 pausiert, Timer 2 fängt an zu zählen.
Button1 drücken: Timer 1 startet wieder, und zwar da wo er pausiert hat, Timer 2 pausiert wieder
usw...
Ich habe probiert das ganze mit millis() zu realisieren und habe alle möglichen Rechnungen getestet, habe aber keine sinnvolle Lösung gefunden, ohne für jede eventuell notwendige Pause eine extra Variable anzulegen welche die Pausenzeit speichert. Das wäre nur eine absolute Notlösung, da die Anzahl der Pausen/Umschaltungen nicht vorhersehbar ist.
Gibt es dafür eventuell irgendwelche Libraries die das ganze vereinfachen oder einen Denkansatz auf den ich noch nicht gekommen bin? Meine Recherche lief leider bisher ins Leere...
Frage: Müssen die Zähler exakte Sekunden ab Tastendruck zählen oder würde es reichen, wenn sie sich an einen unabhängig laufenden Sekundenzähler sozusagen anhängen?
@ TO:
hast du was mit User h_and_y zu tun? Sei ehrlich.
Du musst nicht für jeden Stop und Resume eine Variable anlegen. Du musst diese nur einmalig wenn er weiterzählen soll verrechnen.
Bei Stopp speicherst du den aktuellen millis Wert meinetwegen in 'stopp'.
Wenn er weiterzählen soll, bildest du die letzte Differenz und ziehst diese vom dann aktuellen millis ab. Du legst deine Startzeit um die alte Differenz zurück.
start = millis() - (stopp - start);
Danach subtrahierst du wieder wie gewohnt mit (millis - start) und hast deine laufende Zeit inkl. korrigierten Resume Wert. Weil dieser steckt ab dem Zeitpunkt in start drin.
@wno158
Es wäre schön wenn die Zählung der beiden Timer relativ exakt ist, es kommt aber nicht auf 2-3 Sekunden in der Gesamtzählung an.
@my_xy_projekt
Danke, werde ich dann versuchen umzusetzen. Ich hatte bereits versucht eine Variable hochzählen zu lassen gebunden an die millis()-Funktion, das hat mit meiner Variante aber noch nicht funktioniert.
@Doc_Arduino
Falls du mit "TO" mich meinst (diese Abkürzung ist mir neu, wofür genau steht sie?): Nein, diesen User kenne ich nicht.
Das habe ich ebenfalls bereits versucht, klingt auch erstmal logisch. Ich prüfe nochmal ob in meiner Verschachtelung ein Fehler drin war.
@paulpaulson
Wie gesagt:
Knopf 1: Timer 1 läuft, Timer 2 pausiert
Knopf 2: Timer 1 pausiert, Timer 2 läuft weiter
Knopf 1: Timer 1 läuft, Timer 2 pausiert wieder
usw... Also Der Knopfdruck schaltet die Timer jeweils um, es geht nicht darum zu erfassen wie lange die Taster gedrückt sind.
TO heißt Tread Owner (Hoffe ich habe es richtig geschrieben) also Tread-besitzer, der den Tread angefangen hat.
[quote="disorder218, post:1, topic:855936"]
Das wäre nur eine absolute Notlösung, da die Anzahl der Pausen/Umschaltungen nicht vorhersehbar ist.[/quote]
Wieso? Du brauchst ja nicht die Anzahl bzw die Dauer der einzelnen Pausen sondern nur deren Summe. Da reicht 1 Variable.
Grüße Uwe
@noiasca
Ich würde gerne deinen Sketch ausprobieren, das sieht vielversprechend aus. Jedoch stehe ich komplett auf dem Schlauch wo ich dort meine Buttonpins definieren soll?! Taster1 hängt an D8 und Taster2 an D9.
@noiasca
keine Sorge, das habe ich schon gemacht . Ich habe versucht an der entsprechenden Stelle die Pins zu ändern, hat aber einen Fehler ausgespuckt. Dann häng ich die eben nochmal kurz um und versuche nochmal, Danke
Edit: @noiasca, Hab es jetzt grob verstanden und funktionierend umgesetzt. Vielen Dank. Mein Problem mit den Buttons vorhin war dass ich deine A0 und A1 einfach zu "8" und "9" geändert habe, ich hatte die Buttons via pull-up Widerstand an den digitalen Pins, da wurde der serielle Monitor dauerhaft mit fehlerhaft erkannten Button-Presses gefüllt. Ich habe jetzt die Buttons einfach zwischen den analogen Pins und GND, ohne Widerstand. Das funktioniert einwandfrei, das Problem hätte ich vorhin schon besser schildern sollen
Der weitere Plan ist jetzt die Timerwerte in den EEPROM des Arduino zu speichern, diese beim Start auszulesen und via drittem Button zurückzusetzen. Mal sehen wie das dann läuft
Das wird so einfach nicht klappen. Du wirst auch einen Button zum speichern ins eeprom brauchen denn die Schreibzugriffe ins Eeprom sind begrenzt und du sollst nicht laufend reinschreiben.
Dass das nicht ganz so einfach wird dachte ich mir schon. Mir geht es darum die Werte im Falle eines Ausfalls der Strom/Spannungsquelle gegen Verlust zu sichern.
Was ich mir vorstellen könnte: Eine Abfrage ob X Volt an der Spannungsquelle anliegen, wenn nicht werden die Werte gespeichert. Dafür müsste ich dann natürlich noch einen Kondensator einbinden der noch ausreichend Lange Strom liefert.