LCD-Anti-Flacker-Ideen

Hallo Leute,

wie könnte man eine LCD-Aktualisierung am besten entflackern.

Wenn man einen Wert nur zu bestimmten Zeiten braucht kann man mit Flags arbeiten.
(IF-Verriegelungen) und wenn nur ein bestimmter Wert an einer bestimmten Stelle aktualisiert werden soll kann man mit lcd.setCursor(...) arbeiten (nur den betreffenden Teil aktualisieren) um das Flackern zu verhindern.
Aber wie könnte ich so etwas wie eine Doppelpufferung für die gesamte Aktualisierung realisieren ?

Die beiden ersten Ansätze sind schon sinnvoll. Evtl. noch zusätzlich Werte nur schreiben, wenn sie sich geändert haben.

Doppelpufferung bringt nichts zusätzlich. Was nicht geändert wird, flackert auch nicht.

Gruß Tommy

Du kannst den Display-Inhalt in Zeichenketten speichern und dort beliebig oft aktualisieren, aber nur in festen Intervallen die Zeichenketten auf das Display schreiben. Oder Du setzt ein Flag, wenn sich der Inhalt geändert hat, machst die Aktualisierung aber nur in bestimmten Zeitintervallen. Also Flag ist gesetzt und Wartezeit ist abgelaufen, dann Aktualisieren.

Ok, hat sich erledigt!
.setCursor() hilft schon sehr.

Beispiel (so in etwa passt es bei mir):

....
void AntiFlackerLCD(String zeile1, String zeile2)
{
  lcd.setCursor(0,0);
  lcd.print(zeile1);
  lcd.setCursor((zeile1.length()),0);
  for(int z = zeile1.length(); z < 17; z++)
  {
    if(z == 10 && flagSetWecker == false)
    {
      lcd.print(Temperatur);
      lcd.setCursor(14,0);
      lcd.print("^C");
    }
    else
    {
      lcd.print(" ");
    }
  }
  lcd.setCursor(0,1);
  lcd.print(zeile2);
  for(int z = zeile2.length(); z < 17; z++)
  {
    if(z == 15 && flagWeckerMode == true && flagStelleUhr == false)
    {
      lcd.print("A");
    }
    else if(z == 15 && flagStelleUhr == true)
    {
      lcd.print("S");
    }
    else{
      lcd.print(" ");
    }
  }
}

void DisplayAktualisieren()
{
  String Zeile1;
  String Zeile2;

  if(flagDisplay == true)
  {
    Zeit = String(Stunden);
    Zeit += ":";
    Zeit += String(Minuten);
    Zeit += ":";
    Zeit += String(Sekunden);
    if(flagSetWecker == true)
    {
      Zeit += " T: ";
      Zeit += WTConverter(Wochentag);
    }
    Zeile1 = Zeit;
    if(flagSetWecker == false)
    {
      TemperaturAuslesen();
    }
    if(checkPause == true && flagSetWecker == false)
    {
      Zeile2 = "PAUSE";
    }
    else if(checkStop == true && flagSetWecker == false)
    {
      Zeile2 = "Weckermodus";
    }
    else if(flagSetWecker == true)
    {
      WZeit = "S:";
      WZeit += String(WStunden);
      WZeit += " M:";
      WZeit += String(WMinuten);
      WZeit += " T:";
      WZeit += WTConverter(WWochentag);
      Zeile2 = WZeit;
    }

    AntiFlackerLCD(Zeile1,Zeile2);
  }
}
.....