erstmal möchte ich mich Vorstellen. Meine Name ist Felix und ich mache aktuell eine Ausbildung zum Elektroniker für Geräte und Systeme. Der Teil mit dem Strom sollte also für die meisten Anwendungen kein Problem sein Ich arbeite schon seit Jahren mit Arduino und konnte bisher alle Probleme die Aufgetreten sind lösen, wenn auch oft genug mit Hilfe dieses Forums xD. Jetzt ist es soweit, ich komme absolut nicht weiter.
Ich arbeite aktuell an einer Uhr, die bei uns im Betrieb als kleines Schulungsprojekt/Lötubung genutzt werden soll. Das ganze läuft über einen Nano (328P mit altem Bootloader). Dran hängen tut eine DS1307 sowie ein SSD1306 128x64 OLED in blau.
Der Sketch an sich funktioniert, alles super, doch wenn ich die neueste Version meiner Software hochlade geht irgendwie komisches Zeug ab.
Zum einen Zeigt das Display rechts unten komische "Rauschende Pixel" an, des weiteren funktioniert wenn ich den Speicherbedarf erhöhe, sprich mehr #defines und Variablen rein nehme gar nichts mehr...
Wenn Du die Sketche ausmistest (Löschen der Massen an unbenutzten defines, Teile die nicht zu einer Uhr gehören, wie Hindernisse für Spiele), würden sie übersichtlicher und man könnte sie sich anschauen.
Mach doch einfach mal ein Diff auf die beiden Versionen (z.B. Winmerge), um zu sehen, was sich geändert hat.
Gruß Tommy
Edit:
Für Tasten braucht man in 99,99% der Fälle keinen Interrupt
Serial.print hat in interruptroutinen nichts zu suchen
Variablen, die in ISR und im Programm genutzt werden müssen volatile sein und sollten bei > Byte atomar ausgelesen werden
Vermutlich ein RAM Problem.
Sollen wir uns nun deine zwei Versionen und die erforderlichen Libraries laden um sie beide zu testen (mit deiner Hardware), oder meldest du dich wieder, wenn du das Problem gefunden hast?
ich habe jetzt mal alles an Quatsch rausgeschmissen und nur noch die "wichtigsten Funktionen" drin gelassen. Siehe da: Das Problem ist mal wieder verschwunden. Das Stützt wieder die Vermutung mit dem Speicherproblem, die hatte ich auch schon, konnte das aber eigentlich nicht Nachvollziehen. Die Frage ist, wie ich das verhindern kann... vermutlich muss ich das gesamte Programm schlanker aufbauen, da die Libraries wohl auch noch relativ viel Speicher belegen. Die GFX Library muss ja noch die Schriftart laden und die RTC Lib hat die Wochentagsberechnung drin.
Wenn ihr wollt könnt ihr das Projekt gerne mal ausprobieren, ich lade gerne den Schaltplan hoch.
Von 22 auf 13 kB Text wird sich wohl auch in der Programmgröße in jeder Hinsicht auswirken.
Um die Uhrzeit einer RTC zu lesen braucht man außer Wire.h eigentlich keine Library. Aber ob ungenutzte Funktionen einer überflüssigen Library tatsächlich Speicher belegen, müsste man genauer untersuchen. Wirklich kritisch ist ja stets nur der RAM. FLASH-Überlauf merkt man leichter.
Zur Bibliothek Adafruit_SSD1306 gibt es speichersparendere Alternativen, besonders bei reinen Textausgaben. Oliver Kraus (olikraus) bietet die U8g2 an, die wiederum die U8x8 nur für Text enthält.