ich programmiere nun schon seit ein paar Tagen an meiner Countdown-Steuerung. Doch leider funktioniert diese noch nicht ganz perfekt. Die Anzeige sollte von beispielsweise 8 Minuten, sekundenweise runterzählen mit Hilfe von 7-Segment Anzeigen. Auch sollte man pausieren können, der Countdown soll dann wider weiterlaufen. Am Anfang sollte man jedoch die Zeit mit einem Taster einstellen können (10sec weise). Das funktioniert auch alles bis jetzt. Blos wenn ich jetzt den Arduino stromlos bzw. resete ist der eingegebene Wert wider weg. Mit dem EEPROM.write und EEPROM.read bin ich echt am verzweifeln. Könnt ihr mir bitte weiterhelfen? Ich habe anbei den Sketch ohne EEPROM....
beigefügt. Wahrscheinlich sind es nur ein paar Zeilen Code aber alles was ich versuche scheitert
Das ist ein „bisschen“ ungünstig, weil so ja keiner sehen kann, wo es klemmt. Daher ziemlich allgemein: Mit
EEPROM.write([i]Adresse, Wert[/i]);
schreibst Du an der angegebenen Position den angegebenen Wert in das EEPROM. Mit
EEPROM.read([i]Adresse[/i])
liest Du einen Wert aus. Mit EEPROM.put() und .get() kannst Du auch zusammengesetzte Variablen speichern bzw. lesen. Evtl. hilft mein aufgebohrter Merkzettel zu EEPROM.h
Auch solltest du schreiben, wann du welche Daten im EEprom speichern möchtest.
Dabei musst du beachten, dass im internen EEprom die Anzahl der Schreibzugriffe je Zelle begrenzt ist.
Wenn du also jeden einzelnen Vorgang speichern möchtest, kannst du "schnell" an die Grenzen stoßen.
ich programmiere nun schon seit ein paar Tagen an meiner Countdown-Steuerung. Doch leider funktioniert diese noch nicht ganz perfekt. Die Anzeige sollte von beispielsweise 8 Minuten, sekundenweise runterzählen mit Hilfe von 7-Segment Anzeigen. Auch sollte man pausieren können, der Countdown soll dann wider weiterlaufen. Am Anfang sollte man jedoch die Zeit mit einem Taster einstellen können (10sec weise). Das funktioniert auch alles bis jetzt. Blos wenn ich jetzt den Arduino stromlos bzw. resete ist der eingegebene Wert wider weg. Mit dem EEPROM.write und EEPROM.read bin ich echt am verzweifeln. Könnt ihr mir bitte weiterhelfen? Ich habe anbei den Sketch ohne EEPROM....
beigefügt. Wahrscheinlich sind es nur ein paar Zeilen Code aber alles was ich versuche scheitert
VG
Also ich beschreibe mal, was ich aus Deinen Erklärungen verstnden habe:
ein Arduino, drei Taster, zwei Betriebszustände (PAUSE und COUNTDOWN)
Der eine Taster dient zum Umschalten der Betriebszustände PAUSE/COUNTDOWN
Zwei weitere Taster sind nur im Zustand PAUSE aktiv, einer zählt 10 Sekunden drauf, der andere 10 Sekunden runter
Im Zustand COUNTDOWN zählt das Gerät automatisch im Sekundentakt herunter
Und jedesmal beim Wechsel von PAUSE AUF COUNTDOWN soll der Einstellwert im EEPROM gespeichert werden
(damit nach power-loss mit nachfolgendem power-on wieder ein Countdown mit demselben Startwert beginnen kann.
Ich sehe da kein Problem.
Die Programmlogik müßte nur eben in der setup() Funktion den Wert aus dem EEPROM lesen und immer wenn mit dem Button auf COUNDOWN geschaltet wird, den Wert ins EEEPROM schreiben. Bzw. "updaten": Der Wert muß nur dann neu ins EEPROM geschrieben werden, wenn ein anderer Wert drinsteht als der, der neu hinein geschrieben werden soll.
Da Deine Einstellwerte ja immer ein vielfaches von 10(Sekunden) sind, kannst Du mit nur einem einzelnen Byte im EEPROM (Wert 0...255) eine Countdowndown-Laufzweit von 0 bis 255*10=2550 Sekunden(42:30Minuten)speichern.
Das sollte alles zusammen mit weniger als 100 Zeilen Code machbar sein.
Also das hast du richtig verstanden. Nur die Einstellung sollte innerhalb den ersten 5 sec nach dem Starten einstellbar sein und hier auch gespeichert werden (dauerhaft).
Habe hier mal den Sketch so wie ich ihn mit EEPROM programmiert habe. Habe es so gemacht wie du Jurs es beschrieben hast, aber iwie speichert er die Werte trotzdem nicht.
Retaxx:
Habe hier mal den Sketch so wie ich ihn mit EEPROM programmiert habe ...
Du definierst EEmin und EEsec als Byte-Werte und verwendest das auf eine Art, die mich vermuten lässt, dass Du Wert und Adresse durcheinanderwirfst.
Blöd ist auch, dass EEmin und EEsec als Byte-Werte deklariert sind, Adressen aber 16 Bit breit sein müssen (man muss schließlich auch das letzte Byte (das 1024ste) im EEPROM adressieren können (Byte geht nur bis 255).
Okey das habe ich nicht gewusst . Habe es geändert ist aber immer noch nicht besser.... Habe jetzt mal geschaut und rausgefunden das immer die minutenwert im EEmin UND im EEsec abspeichert, obwohl ich bei EEsec die seconds reinschreibe. Kann das sein das ich da nur einen Speicher habe im EEPROM??
Retaxx:
Okey das habe ich nicht gewusst . Habe es geändert ist aber immer noch nicht besser.... Habe jetzt mal geschaut und rausgefunden das immer die minutenwert im EEmin UND im EEsec abspeichert, obwohl ich bei EEsec die seconds reinschreibe. Kann das sein das ich da nur einen Speicher habe im EEPROM??
Nein. Ich bin mir ziemlich sicher, dass Du immer noch falsch ausliest/schreibst (beide Male den Wert an der gleichen Adresse). Schreibe die .write()- bzw. .read()-Befehle so um, dass jeweils fix auf die Adressen 0 und 1 des EEPROMs zugegriffen wird. Wenn es dann immer noch nicht funktioniert, poste Deinen Sketch noch einmal komplett. Ich bin grad ziemlich „an der Kante“ und vielleicht nicht hundertprozentig konzentriert. Aber nochmal draufgucken könnte ich wohl schon ...