Ich verwenden einen 128x32 pixel I2C OLED Display (ohne Reset Pin) am Arduino Nano und zeige damit Sensorwerte von DS18B20 Temperatursensoren an.
Die Anzeige im Display wechselt alle paar Sekunden von einem Sensor auf den anderen..
Das Ganze funktioniert hervorragend & sehr stabil...
Nun ist da allerdings das Problem das nach ein paar Stunden Laufzeit der Display auf einmal dunkel bleibt und nix mehr anzeigt...
Das ist sofort behoben wenn ich mal eben den Arduino neu starte, es reicht sogar schon mich mit dem Rechner anzuklemmen & den Seriellen Monitor zu öffnen... Display ist dann sofort wieder da...
Um das zu umgehen, hab ich einen reset des Arduinos nach x Stunden einprogrammiert, aber auch das tut nicht was es soll...
Hat Jemand das selbe Problem & evtl ne Lösung dazu?
die von dir verwendete Methode der Umschaltung ist schon etwas merkwürdig.
Du solltest dabei berücksichtigen, dass die Sensoren eine gewisse Zeit zum Messen benötigen. Auch würde ich besser die Sensoren "ständig" messen lassen und nur die jeweilige Variable mit den Messdaten umschalten.
Somit ist dein Sketch sicher verbesserungswürdig.
Allerdings Strings wie vermutet, kann ich nicht finden. Somit muss das Problem anderswo gesucht werden.
@ HotSystems: Die Sensoren messen bei jedem Schleifendurchlauf, Ansonsten währe die Temperaturanzeige bei jedem Wechsel Statisch und ändert sich innerhalb der Umschaltzeit zum Anderen Sensor nicht mehr..
Das Problem verursacht er nicht... Das Problem war schon vorher da, das war nur ein Lösungsversuch.. - der leider nicht geklappt hat..
Die Umschaltung des Displays hab ich so gelöst um den Loop möglichst klein zu halten & ich nicht "1000 Unterfunktionen" Schreiben wollte... Daher wird der Status ("next_step=x") des Loops (gesteuert nach Zeit) an die Temp Funktion übergeben & die macht dann den Rest... Programmiertechnisch wohl nicht perfekt aber ich fand's clever...
Ich bin auch kein Profi-Programmierer... Ich lerne noch... Meist Autodidaktisch mit Foren-, Internet- Unterstützung & Projektbezogen... Also learning by doing...
@ Rentner:
was heißt das UL nach der Zahl?
Die Compileraneisungen (ich nehme an Du meinst die " #define") hab ich gewählt um weit oben im Sketch die wichtigsten Einstellungen beisammen zu haben... Und das ganze "human readable" daher die anschließenden Berechnungen...
Verbesserungsvorschläge die das besser machen, nehm ich gern an...
Ich möchte da nur nicht diverse Zeitverzögerungen (die in ms angegeben werden müssen) bei jeder Konfigurationsänderung händisch neu errechnen... (Bin Faul ;D )
Skipper_Do:
.....
Die Umschaltung des Displays hab ich so gelöst um den Loop möglichst klein zu halten & ich nicht "1000 Unterfunktionen" Schreiben wollte...
Was hast du gegen Funktionen ?
Diese machen deinen Sketch übersichtlicher, auch für dich.
Damit ist dieser besser lesbar und für dich auch später noch besser verständlich.
Zudem lassen sich Fehler besser einkreisen.
Somit nur Vorteile und es gibt sicher noch mehr positive Gründe, Funktionen zu verwenden.
Dann würde ich auch verstehen, warum du den Sketch so merkwürdig aufgebaut hast.
Den Sinn warum das so ist, verstehe ich leider immer noch nicht.
Aber egal, Hauptsache du versteht es.
Ich hab absolut nix gegen Funktionen... Zumal ich diese gerade für mich "entdeckt" habe....
Aber offensichtlich hab ich wohl noch nicht so ganz verstanden wie diese "richtig" eingesetzt werden..
Aber das Kommt noch...
Die Schleife im Loop erzeugt Zeitgesteuert die Zahl 1, 2 oder 3 und dann von vorn...
Diese Zahl wird an die Temp Funktion übergeben und weiter verarbeitet...
Je Nachdem welche Zahl übergeben wurde Zeigt der Display dann die Außentemperatur, die Innentemperatur oder die Differenztemperatur zwischen innen & aussen an, incl. Passendem Schriftzug...
Die Temp Funktion ist unterteilt in "1. Displayzeile" mit keiner Schriftgröße wo Innen- Außen & Differentemp. & "2. Displayzeile" mit etwas größerer Schrift wo die Sensorwerte angezeigt werden...
So schwer sollte der Sketch doch nicht zu durchschauen sein, oder?
Skipper_Do:
So schwer sollte der Sketch doch nicht zu durchschauen sein, oder?
Für dich vielleicht.
Aber deine zahlreichen if-Verschachtelungen machen den Sketch für externe unlesbar.
Zumal da jegliche nützliche Kommentare fehlen.
ich habe mir deinen Sketch jetzt noch mal in Ruhe angesehen und kann leider keinen direkten Fehler erkennen.
Da ich schon mehrere dieser Sensoren verbaut habe und diese auch problemlos über Monate bzw. Jahre funktionieren, kann ich mir nur vorstellen, dass es an deiner, mir unergründlichen Art der Auslesung der Sensoren liegt.
Allerdings habe ich da keinen weiteren Tipp, als den schon genannten.
Oder evtl. I2C, hast du da Pullup-Widerstände dran ?
Länge der I2C-Leitung ?
PullupResistoren sind verbaut, die Leitungslänge zum Display beträgt ca 300 - 400mm..
Die Ausleseart ist wohl der gängige Standard für diese Sensoren... Zumindest hab ich noch keine andere art der Auslesung zu Gesicht bekommen...
Im Loop werden sie ja ausgelesen & in der Temp Funktion verarbeitet...
Seit dem letzten Flashen Läuft es bereits seit 8 tagen durchgehend ohne Ausfall...
Ich habe lediglich die Codezeilen
display.println("....");
in
display.print(F("..."));
geändert, und bin somit dem Tipp von Rentner & wno158 gefolgt..
Ich gehe zwar aktuell nicht davon aus, das es nochmal ausfallen wird, aber sollte das Teil jetzt 2 Wochen ohne Ausfall durchhalten (das ist im Regelfall die Dauer die das Gerät im schnitt am Stück betrieben wird) werd ich die Resetschaltung nach x stunden mal Entfernen & mal schauen was passiert...
Ich Danke für eure Hilfe & Tipps, wenn gewünscht erzähle ich euch noch das Ergebnis der oben beschriebenen Vorgehensweise...