Umschreiben auf I2C-Display schlägt fehl

Hallo,

ich habe - wie ich finde - einen wirklich tollen Code für eine Auqarienbeleuchtung gefunden. Er gefällt mir sogar so gut (Lichttemperatur, EInstellbarkeit etc), dass ich mein fertiges Aquarienprojekt noch mal über Board werfen möchte, um es neu aufzubauen. Es handelt sich um dieses hier:

Bis auf das Display sind alle komponenten und die selben; ich verwende ein I2C-Display, welches ich auch weiterhin benutzen möchte.

Das Problem ist, dass das im Code bereits angelegte umstellen auf I2C nicht funktioniert. Im Code würden einfach 2 oder 3 Zeilen, die jetzt als Kommentar ausgegraut sind, eingesetzt und es sollte gehen. Dem ist aber nicht so, denn dann wird nicht kompiliert.

Ich habe bereits rausgefunden, dass die LCD Bar Graph Library nicht geht mit I2C, weshalb ich diese durch die Library LCD Bar GraphX ersetzt habe. Das lief dann schon mal besser, allerdings meckerte das Programm kompilieren dann doch wegen lbgIntensity.forceRedraw(); and lbgIntensity.createAllChar(); welche es wohl in der LBGx Library nicht geht.
Lösche ich diese, wird kompiliert, aber das Display liefert dann kein Bild. :frowning:

Ich habe schon Stunden rumgedoktort und Lösungen gesucht, aber nichts gefunden. Das Projekt ist auch nur unter GitHub zu finden und weiter geht nichts...

Habt ihr Ideen, was ich tun könnte, damit es läuft?

Viele Grüße

Hallo,

die LCD Bar Graph Library hat mit I2C nichts zu tun.
Die LCD Ansteuerung übernimmt weiterhin die LiquidCrystal.h.
Da die Bsp. jedoch noch auf .pde enden statt auf .ino, wird das wohl sehr alt sein.

Du musst erstmal schauen ob du dein Display mit I2C mit der Standard LiquidCrystal zum laufen bekommst.

Hey,

danke für die schnelle ANtwort. Dann wird das wohl der Grund sein. Mein Display läuft nämlich mit der NewLiquidCrystalLibrary 1.3.5 und nicht mit der die Standard ist...
Ich hatter aber beim ersten Kompilen noch die Standard-Library genommen. Eigentlich hätte er doch dann compilen müssen, oder nicht? Das Display hätte zwar nicht funktioniert, aber der Code würde ja wenigstens stimmen?!

https://playground.arduino.cc/Code/LcdBarGraph/

Hier heißt es übrigens, dass man für die LCDBarGraph bei I2C-Betrieb doch eine extra Library braucht.

Wie gehe ich nun an die Sache ran?

Hallo,

wenn du eine Lib hast die mit deinem Display funktioniert, dann sollte es reichen wenn du die Lib im Projekt gegen die funktionierende austauscht. Dazu musste auch alle Headerfiles durchschauen.

Hey,

ich bin leider noch Neuling und der Fachsprache nicht ganz so mächtig.

Was ich gemacht habe, ist dass ich bei #include Änderungen vorgenommen habe.

und folgendes geändert habe:

//LiquidCrystal lcd(12, 13, 8, 7, 5, 4);
LiquidCrystal_I2C   lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE);  // Set the LCD I2C address

Bisher habe ich das Display damit immer zum Laufen bekommen, bisher hatte ich nie Probleme, es in andere Sketches zu integrieren. AUßer jetzt halt.

Ich weiß nicht, was du mit Headerfiles meinst. Könntest Du das spezifizieren?

Ich bin kein Experte, aber ich vermute den Fehler eigentlich in der LCDBarGraphLibrary.
In der im projekt verwendeten gibt es in der cpp-Datei der library nämlich sowohl lbgIntensity.forceRedraw(); als auch lbgIntensity.createAllChar();
Diese gibt es in der LCDBarGraphX, die ich ja für I2C benöötige nicht...

Hallo,

aus der Ferne ...

Du hast bestimmt das gesamte Projekt vor dir liegen und wenn du das in der IDE öffnest siehst du viele Tabs.

Änderungen vornehmen müßtest du

a) im ersten Tab zwischen
#include <Bounce2.h>
#include <LcdBarGraph.h>

b) im lcd Tab

c) und dann mußte noch in die Lcd Bar Graph Lib rein.
.h ... Header Dateien
.cpp ... Implementationsdateien

auch hier mindestens include abändern

Wenn das noch nicht reicht, tja dann ist der Aufwand höher wie Anfangs gedacht.
Dann wäre es vielleicht gut den Autor anzuschreiben. Der kennt seine Zusammenhänge am Besten.
Testen kann ich das nicht. Ich kann nur nach Besten Wissen und Gewissen abschätzen wo was geändert werden müßte.

Hey,

danke für die Tipps - ich habe deinen Tipp mit den headern umgesetzt und ich habe das Display zum Laufen bekommen. Ich habe die beiden Header (LCDBarGraph und LCDBarGraphX) verglichen und die fehlenden Zeilen der BarGraph auf die barGraphX übertragen bzw. festgestellt dass createAllChar(); in der einem begin() in der anderen entspricht.
Das Display läuft, es wird alles angzeigt. auch der RotaryEncoder ging gleich.

Ein Problem bleibt aber:
Gehe ich in das EInstellungsmenü auf die unterste Ebene, dann löscht sich nach dem Bruchteil einer Sekunde das Display und ich lande auf dem "Homescreen".
Gibt es eine Möglichkeit auszulesen, was der Arduino macht, wenn ich auf der untersten Ebene des Menüs bin?

Vielen Dank und viele Grüße!

Viele Serial.print/Serial.println einbauen und Dir die Variablenwerte und die Stelle ausgeben lassen.

Gruß Tommy

Hallo,

na das liest doch schon erfreulich. Manchmal muss man auch Glück haben.
Das was Tommy anspricht nennt sich jetzt debuggen. Kann lang und steinig werden.
Serial.print ist der Debugger des kleinen Mannes oder auch Frau. :wink:

Die Menüebenen sind sicherlich durchnummeriert und irgendwo gibts einen Überlauf der wohl nicht so läuft wie geplant. Du könntest mal bitte deinen aktuellen Stand des Projekts zur Verfügung stellen. Da es viele .ino Dateien sind, am Besten davon den Hauptordner packen (.zip) und anhängen. Mal schauen wo man sinnvoll ansetzen kann.
Wenn du erstmal selbst schauen möchtest, kann ja sein, dann such dir die Variable raus die mit dem Encoder verändert wird um durch das Menü zuscrollen. Irgendwo wird es eine Diskrepanz zwischen dem Encoderzähler und der Anzahl der Ebenen geben. So würde ich auch erstmal vorgehen. Ich müßte nur das Projekt erstmal etwas für mich abspecken/umbauen, da ich deine Hardware sicherlich nicht 1:1 habe. Anschauen würde ich mir das jedoch.