LC - Display Uhrzeit Ausgabe Problem

Hallo!

Ich möchte mir mit meinem Code auf einem LC - Display Temperatur , Luftfeuchtigkeit und das Datum + Uhrzeit anzeigen lassen. Die Ausgabe von Temperatur und Luftfeuchtigkeit funktioniert bereits, aber das Datum und die Uhrzeit machen mir Probleme. In diesem Code wird nur versucht die Zeit zu printen, aber dies funktioniert nicht ganz.

Das Problem:

Wenn man Programm in das Case 4 wechselt sollte es die Uhrzeit printen, aber es ist eine gewisse Zeit das Display leer und dann kommt kurz die Zeit mit einem chinesischen Zeichen dahinter und dann folgt wieder Case 1.

#include <DS3231.h>
#include "DHT.h"
#include <LiquidCrystal.h>

LiquidCrystal lcd(11, 10, 9, 8, 7, 6);
 
#define DHT1PIN 12    
#define DHT2PIN 13
 

#define DHT1TYPE DHT11   
#define DHT2TYPE DHT11   
 
DHT dht1(DHT1PIN, DHT1TYPE);
DHT dht2(DHT2PIN, DHT2TYPE);

int ablauf;

DS3231  rtc(SDA, SCL); 

void setup() {

  lcd.begin(16, 2);
  rtc.begin();
  dht1.begin();
  dht2.begin();
  
}
 
void loop() {
  
  float h1 = dht1.readHumidity();
  float t1 = dht1.readTemperature();
  float h2 = dht2.readHumidity();
  float t2 = dht2.readTemperature();
  
  switch(ablauf){
    case 0:
        lcd.clear();
        lcd.setCursor(0,0);   
        lcd.print("  Temperaturen");
        delay(2000);
        ablauf++;
        break; 
        
    case 1:
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Innen:");
        lcd.print("  ");
        lcd.print(t1);
        lcd.print(" ");
        lcd.print("*C");
        
        lcd.setCursor(0,1);
        lcd.print("Aussen:");
        lcd.print(" ");
        lcd.print(t2);
        lcd.print(" ");
        lcd.print("*C");
        
        delay(4000);
        ablauf ++;
        break;
        
    case 2: 
        lcd.clear();
        lcd.setCursor(0,0);   
        lcd.print("Luftfeuchtigkeit");
        delay(2000);
        ablauf++;
        break;    
    
    case 3:
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.print("Innen:");
        lcd.print("  ");
        lcd.print(h1);
        lcd.print("  ");
        lcd.print("%");
        
        lcd.setCursor(0,1);
        lcd.print("Aussen:");
        lcd.print(" ");
        lcd.print(h2);
        lcd.print("  ");
        lcd.print("%");
        
        delay(4000);
        ablauf ++;
        break; 
          
    case 4:
        lcd.clear();
        lcd.setCursor(0,0);
        lcd.println(rtc.getTimeStr());
        delay(4000);
        ablauf ++;
        
        break;    
    }

  if(ablauf == 5){
    ablauf = 0;
    }
}

LG

Hast Du mal anstelle von

lcd.println(rtc.getTimeStr());

ohne Zeilenvorschub

lcd.print(rtc.getTimeStr());

probiert?

Gruß Tommy

Speedcore016:
dann kommt kurz die Zeit mit einem chinesischen Zeichen

Genaugenomen japanisch. Das ist ein CR + LF. Wie gesagt vom println()

Auf Seite 17 ist der Zeichensatz des Displays:

Da sieht du auch wie man das Grad Zeichen bekommt. 0xDF unten rechts. Im Code so:

lcd.print("\xDF" "C");

Das stückeln ist hier nötig weil der Compiler das sonst als eine Hex-Zahl 0xDFC interpretiert

Die Umlaute liegen auch in diesem Bereich und können einfach eingefügt werden

Genaugenomen japanisch. Das ist ein CR + LF. Wie gesagt vom println()
Auf Seite 17 ist der Zeichensatz des Displays:
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf

Verstehe ich nicht. Ich hätte gedacht, dass lt. deiner Seite 17 bei
CR ( 0x0D ) das selbstdefinierte Zeichen (6)
LF ( 0x0A ) das selbstdefinierte Zeichen (3)
erscheint. Ob das nun japanisch, nach Fliegendreck oder komplett unsichtbar aussieht, ist evtl. Zufall.

Die Faustregel, dass man kein println, sondern nurprintbei Displays verwendet, ist aber schon klar.