Zusätzliches RTC Module an Wetterstation

Hallo ich habe eine funktionierende Wetterstation bei der ich 2 DHT11 Sensoren verwende einer Direkt am Arduino für die Innentemperatur der andere ist mit 1,5 Meter Kabel nach außen verlegt für die Außentemperatur. Alle Werte werden auf einem LCD Display angezeigt
Meine Frage nun bekommt man es hin das ich ein RTC Ds1307 Modul hieran anschließe um auch noch die Uhrzeit hierauf anzuzeigen. Könnte ja auch sein das es gar nicht funktioniert. Habe unteranderem schon versucht es einfach anzuschließen und so wie bei der Abfrage beider Sensoren einen delay hintergepackt.
Was mir dann im LCD angezeigt wird ist aber nichts er überspringt die Uhrzeit einfach und geht wieder zum Anfang des void loop. Aber hier ist nun die Uhrzeit über der Temperatur zu sehen sodass kein klares Bild ( Uhrzeit und Temperatur und Luchtfeuchtigkeit) angezeigt wird.

Ich hoffe ihr könnt mich hierüber aufklären und helfen danke.
Falls ihr Code oder ähnliches braucht stelle ich euch dies gerne zur Verfügung
LG

#include <Time.h> 
#include <Wire.h>
#include <DS1307RTC.h>
#include <DHT.h>
#include <DHT_U.h>

#include <Adafruit_Sensor.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //In dieser Zeile wird festgelegt, welche Pins des Mikrocontrollerboards für das LCD verwendet wird
DHT dht(10, DHT11);
DHT dht1(7, DHT11);
void setup() 
{
  dht.begin();
  dht.begin();
lcd.begin(16, 2); //Im Setup wird angegeben, wie viele Zeichen und Zeilen werwendet werden.
Serial.begin(9600); //Öffnet den seriellen Port und legt die Baud Rate (9600) für die serielle Übertragung fest.
setSyncProvider(RTC.get); //Dies ist die Funktion um die Zeit- und Datumsangabe von der RTC zu bekommen
}

void loop() 
{
   //Auslesen und Zwischenspeichern der Temperarur- und Feuchtigkeitswerte
  int t = dht.readTemperature(); 
  int h = dht.readHumidity();
  int t1 = dht.readTemperature(); 
  int h1 = dht.readHumidity();
  
  //Anzeigen der Werte
  lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T1: ");
  lcd.print(t);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F1: ");
  lcd.print(h);
  lcd.print("%");
  
  
  delay(5000);
    
  lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T2: ");
  lcd.print(t1);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F2: ");
  lcd.print(h1);
  lcd.print("%");
  
  
  delay(5000);
  
Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); //bei den Minuten und Sekunden wird der Befehl
printDigits(second()); //printDigits angegeben welcher am Ende des Codes noch festgelegt wird.
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
delay(1000); //warte eine Sekunde
lcd.setCursor(2, 0); //setCursor gibt an wo der Text beginnen soll. In diesem Fall beim dritten Zeichen in der ersten Reihe.
lcd.print(hour()); //Hier soll jetzt die Uhrzeit angezeigt werden, also „hour“ „:“ „minute“ usw..
lcd.print(":");
lcd.print (minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr"); //Hier soll nach der Uhrzeit noch das Wort „Uhr“ angezeigt werden, dazu müssen noch3 Leerzeichen folgen, sonst würde bei Zahlen <10 immer ein weiteres „r“ hinter Uhr angezeigt werden. Das liegt daran, dass in der LCD Library der Befehl eine 0 vor Zahlen <10 anzuzeigen nicht vorhanden ist.
lcd.print(" ");
lcd.print(" ");
lcd.print(" "); 
lcd.setCursor(1, 1); // Der nächste „Text“ soll nun beim zweiten Zeichen in der zweiten Reihe beginnen.
lcd.print(day()); // Das Datum soll nun als
lcd.print("."); // „Tag“, „.“ „Monat“ usw. angegeben werden.
lcd.print(month());
lcd.print(".");
lcd.print(year());
}


void printDigits(int digits) //In diesem Abschnitt wird festgelgt, dass bei Zahlen <10 im seriellen Monitor automatisch eine 0 vor den Ziffern angezeigt wird. Das gilt nur für den seriellen Monitor und nicht für LCD Display.
{ 
Serial.print(":"); 
if(digits < 10) 
Serial.print('0'); 
Serial.print(digits); 
}

max0708: ..... Ich hoffe ihr könnt mich hierüber aufklären und helfen danke.

Klar ist das hinzukriegen. Nur ohne deinen Sketch können wir nicht helfen, also bitte den in Code-Tags posten.

Ein weiteres Problem wird allerdings deine RTC sein, die ist sehr ungenau. Da solltest du besser die DS3231 verwenden.

HotSystems: Klar ist das hinzukriegen. Nur ohne deinen Sketch können wir nicht helfen, also bitte den in Code-Tags posten.

Ein weiteres Problem wird allerdings deine RTC sein, die ist sehr ungenau. Da solltest du besser die DS3231 verwenden.

Hab ihn jetzt dabei musste ihn nur kurz zusammenfügen so wie ich ihn hatte als das "Problem" enstand. Ich weiß unteranderem nicht ob der DS3231 per Lieferung ankommt deswegen versuche ich es mit dem DS1307, da ich den ohnehin da habe. LG

Du musst in deinem Sketch mal die Eingaben im LCD richtig stellen. " lcd.setCursor(0,1);"

Du überschreibst an einigen Positionen schon vorhandene Anzeigen.

Wenn du das sortierst, wird es sicher besser aussehen.

HotSystems:
Du musst in deinem Sketch mal die Eingaben im LCD richtig stellen.
" lcd.setCursor(0,1);"

Du überschreibst an einigen Positionen schon vorhandene Anzeigen.

Wenn du das sortierst, wird es sicher besser aussehen.

Aber sie löschen sich doch nicht die vorher geschriebenen Zeichen. Jetzt habe ich nur die Position verändert.
Hier habe ich nur einen Ausschnitt des Codes kopiert:

 lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T1: ");
  lcd.print(t);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F1: ");
  lcd.print(h);
  lcd.print("%");
 
 
  delay(5000);
   
  lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T2: ");
  lcd.print(t1);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F2: ");
  lcd.print(h1);
  lcd.print("%");
 
 
  delay(5000);
 
Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); //bei den Minuten und Sekunden wird der Befehl
printDigits(second()); //printDigits angegeben welcher am Ende des Codes noch festgelegt wird.
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
delay(1000); //warte eine Sekunde
lcd.setCursor(2, 0); //setCursor gibt an wo der Text beginnen soll. In diesem Fall beim dritten Zeichen in der ersten Reihe.
lcd.print(hour()); //Hier soll jetzt die Uhrzeit angezeigt werden, also „hour" „:" „minute" usw..
lcd.print(":");
lcd.print (minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr"); //Hier soll nach der Uhrzeit noch das Wort „Uhr" angezeigt werden, dazu müssen noch3 Leerzeichen folgen, sonst würde bei Zahlen <10 immer ein weiteres „r" hinter Uhr angezeigt werden. Das liegt daran, dass in der LCD Library der Befehl eine 0 vor Zahlen <10 anzuzeigen nicht vorhanden ist.
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(1, 1); // Der nächste „Text" soll nun beim zweiten Zeichen in der zweiten Reihe beginnen.
lcd.print(day()); // Das Datum soll nun als
lcd.print("."); // „Tag", „." „Monat" usw. angegeben werden.
lcd.print(month());
lcd.print(".");
lcd.print(year());
}

Muss ich die im oberen Teil verändern die “lcd.setCursor” also im Teil der DHT11 Sensoren oder im unteren.

Ne ich weiß echt nicht wie ich weiter komme habe es auch mit dem Befehl "lcd.clear();" probiert aber es hat nichts gebracht.

Also so wie ich es sehe, schreibst du die erste Temperatur in Zeile 1 ab 1. Pos. Mit Temperatur 2 überschreibst du alles.

Und die Uhrzeit schreibst du in Zeile 1 an Pos. 3 Damit überschreibst du die erste Temp.

HotSystems:
Also so wie ich es sehe, schreibst du die erste Temperatur in Zeile 1 ab 1. Pos.
Mit Temperatur 2 überschreibst du alles.

Und die Uhrzeit schreibst du in Zeile 1 an Pos. 3
Damit überschreibst du die erste Temp.

Ja das habe ich jetzt auch gesehen. Aber wie schreibe ich es stattdessen also ohne das Überschreiben?
Also wie würde das aussehen als Code? Ich bin mit meinen schon so wenigen Kenntnissen bei weitem jetzt am Ende.
Ein zweites mal Überschreiben funktionert dann wahrscheinlich auch nicht.

void loop()
{
   //Auslesen und Zwischenspeichern der Temperarur- und Feuchtigkeitswerte
  int t = dht.readTemperature();
  int h = dht.readHumidity();
  int t1 = dht.readTemperature();
  int h1 = dht.readHumidity();
 
  //Anzeigen der Werte
  lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T1: ");
  lcd.print(t);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F1: ");
  lcd.print(h);
  lcd.print("%");
 
 
  delay(5000);
   
  lcd.setCursor(0,0); //Selektion 1. Zeile (man beginnt beim Zählen mit 0)
  lcd.print("T2: ");
  lcd.print(t1);
  lcd.print("'C");
 
  lcd.setCursor(0,1); //Selektion 2. Zeile
  lcd.print("F2: ");
  lcd.print(h1);
  lcd.print("%");
 
 
  delay(5000);
 
Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); //bei den Minuten und Sekunden wird der Befehl
printDigits(second()); //printDigits angegeben welcher am Ende des Codes noch festgelegt wird.
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
delay(1000); //warte eine Sekunde
lcd.setCursor(0, 0);
lcd.print(hour()); //Hier soll jetzt die Uhrzeit angezeigt werden, also „hour" „:" „minute" usw..
lcd.print(":");
lcd.print (minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr"); //Hier soll nach der Uhrzeit noch das Wort „Uhr" angezeigt werden, dazu müssen noch3 Leerzeichen folgen, sonst würde bei Zahlen <10 immer ein weiteres „r" hinter Uhr angezeigt werden. Das liegt daran, dass in der LCD Library der Befehl eine 0 vor Zahlen <10 anzuzeigen nicht vorhanden ist.
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(0, 1); // Der nächste „Text" soll nun beim zweiten Zeichen in der zweiten Reihe beginnen.
lcd.print(day()); // Das Datum soll nun als
lcd.print("."); // „Tag", „." „Monat" usw. angegeben werden.
lcd.print(month());
lcd.print(".");
lcd.print(year());
}


void printDigits(int digits) //In diesem Abschnitt wird festgelgt, dass bei Zahlen <10 im seriellen Monitor automatisch eine 0 vor den Ziffern angezeigt wird. Das gilt nur für den seriellen Monitor und nicht für LCD Display.
{
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);
delay(5000);
}

nun zeigt er das gleiche wieder an oder hab hat das nichts gebracht. Habe in den Zeilen bei lcd.print alles von der Uhrzeit nochmal Überschrieben.
LG

So schwer ist das doch nicht.

Bei setCursor ist die erste Ziffer die Position und die zweite Ziffer die Zeile. Einfach mal ein wenig damit probieren.

HotSystems:
So schwer ist das doch nicht.

Bei setCursor ist die erste Ziffer die Position und die zweite Ziffer die Zeile.
Einfach mal ein wenig damit probieren.

Tut mir leid ja dankeschön
Hab mich ein bisschen angestellt.
Hab alles gemacht wie du es gesagt hast hat nun alles geklappt und das überschreiben hab ich mit

Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); //bei den Minuten und Sekunden wird der Befehl
printDigits(second()); //printDigits angegeben welcher am Ende des Codes noch festgelegt wird.
Serial.print(" ");
Serial.print(day( ));
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
//delay(1000); //warte eine Sekunde
lcd.setCursor(0,0);
lcd.print(hour()); //Hier soll jetzt die Uhrzeit angezeigt werden, also „hour" „:" „minute" usw..
lcd.print(":");
lcd.print (minute());
lcd.print(":");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr"); //Hier soll nach der Uhrzeit noch das Wort „Uhr" angezeigt werden, dazu müssen noch3 Leerzeichen folgen, sonst würde bei Zahlen <10 immer ein weiteres „r" hinter Uhr angezeigt werden. Das liegt daran, dass in der LCD Library der Befehl eine 0 vor Zahlen <10 anzuzeigen nicht vorhanden ist.
lcd.print(" ");
lcd.print(" ");
lcd.print(" ");
lcd.setCursor(0, 1); // Der nächste „Text" soll nun beim zweiten Zeichen in der zweiten Reihe beginnen.
lcd.print(day()); // Das Datum soll nun als
lcd.print("."); // „Tag", „." „Monat" usw. angegeben werden.
lcd.print(month());
lcd.print(".");
lcd.print(year());
 delay(5000); 
 lcd.clear();
}

dies ist wieder nur der Teil der Uhrzeit und des Datums. So kommt es zu keinem Überschneidungen mehr mit den Werten der DHT11 Sensoren
Danke
LG

Prima, dass es jetzt klappt und danke für die Rückmeldung.

Kein Problem und dankeschön für die Hilfe.

du schreibst in deinem Code

DHT dht(10, DHT11);
DHT dht1(7, DHT11);
void setup()
{
  dht.begin();
  dht.begin();

müsste das nicht eigentlich heißen

DHT dht(10, DHT11);
DHT dht1(7, DHT11);
void setup()
{
  dht.begin();
  dht1.begin();

und bei

int t = dht.readTemperature();
  int h = dht.readHumidity();
  int t1 = dht.readTemperature();
  int h1 = dht.readHumidity();

muss es da nicht heißen

int t = dht.readTemperature();
  int h = dht.readHumidity();
  int t1 = dht1.readTemperature();
  int h1 = dht1.readHumidity();

Oder hab ich da was falsch verstanden. Wie soll er sonst den außen hängenden vom innen angebrachten Sensor unterscheiden?

So, wie ich es lese, müsste ja int t immer gleich int t1 sein, was ja nicht Sinn der Sache sein kann.

Hab ich da etwas entscheidendes übersehen?