Problem mit Wemos D1 mini und LCD 2004a

Hallo Leute,

bin kurz vorm Verzweifeln. Ich möchte mit dem LCD in Intervallen eine Meldung ausgeben/aktualisieren.

In der Setup-Routine funktioniert alles einwandfrei, aber in der Loop() und den Methoden die ich von dort aufrufe tut sich am LCD gar nichts mehr. Die Variable ist global und bekomme vom Compiler auch keine Meldung dass sie nicht deklariert wäre.

Was mache ich falsch?

#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x3F,20,4);

void setup()
{
  // Funktioniert wie es soll

  lcd.init();
  lcd.clear();
  lcd.backlight();
  lcd.setCursor(0,0);
  lcd.print("Display funktioniert");
  lcd.setCursor(0,1);
  lcd.print("einwandfrei");
}

void loop()
{
  meineFunktion();
  delay(5000);
}

void meineFunktion()
{
  Serial.print("Anweisung wird ausgeführt");

  // Anweisungen werden ignoriert 
  // OHNE Fehler, dass lcd nicht deklariert wäre.
  // Wird einfach ignoriert als wären sie auskommentiert. :-(

  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Anweisungen werden");
  lcd.setCursor(0,1);
  lcd.print("ignoriert");
  
  Serial.print("Anweisung ebenfalls ausgeführt");
}

Hänge mal zum Testen ein delay(1000); in den loop hinter meineFunktion();
Du knallst das Display zu, das kommt nicht hinterher und Deine Augen auch nicht. Da wird gelöscht, bevor Du was gesehen hast.

Später kannst Du ja dann eine Zeitsteuerung mit millis() bauen oder nur wenn sich etwas ändert den Inhalt ändern.

Gruß Tommy

Hab ich stehen, sorry hab ich vergessen hier reinzuschreiben. Das Display soll eigentlich alle 5 Sekunden aktualisiert werden.

Wie sollen wir uns Deines Problems annehmen, wenn Du uns nicht den Sketch zeigst, der es verursacht?

Gruß Tommy

Weil er mehrere 1000 Zeilen lang ist und auf 15 Dateien verteilt. Daher habe ich den Code auf das eigentliche Problem reduziert! :wink:

Was sagt Dein Serieller Monitor?

Gruß Tommy

Der sagt, dass alle Anweisungen vor und nach den lcd-Befehlen ausgeführt werden! Es ist, als wäre die Variable lcd nach Beenden der setup() durch ein anderes Objekt mit den gleichen Funktionen ersetzt worden die aber alle leer sind! :frowning:

Warum löschst du dein Display bei jedem Durchlauf ?

Evtl. spielt dir der Compiler einen streich.

Setze deine Funktion mal vor das Setup.

Hab ich schon versucht, kein Effekt. Die Meldungen erscheinen ja auch im seriellen Monitor. Die Funktion wird also korrekt aufgerufen, aber die lcd-Anweisungen werden einfach ignoriert!

Verstehe ich das richtig, du bekommst keine Fehlermeldungen ?
Hast du die in den Einstellungen auch eingeschaltete bzw. angehakt ?