DS 1307 RTC Module umstellen

Hallo wie ihr vielleicht wisst wird ja zum 29.03.2020 die Uhr vorgestellt auf die Sommerzeit. Nun habe ich die frage ob das der DS1307 automatisch sich umstellt. Ich denke mal nicht oder? Würde es dann da ausreichen ihn neu einzustellen oder müsste das umständlicher gelöst werden. Habe schon bei anderen Seiten im Internet geschaut und dort schreiben manche das man einfach +1 hinter die Stundenzahl schreiben kann. Jedoch schließt sich mir nicht daraus wie genau ich das +1 in Form von einem Code umsetze.
Ich nehme zuerst an das ihr den Code hoffentlich noch nicht braucht, da es ja kein Problem am Code gibt.
Ich danke schonmal herzlichst für jede mögliche Rückmeldung die ihr mir schreibt. Danke

LG

max0708:
Hallo wie ihr vielleicht wisst wird ja zum 29.02.2020 die Uhr vorgestellt auf die Sommerzeit.

Haben wir wohl verpasst. ;D

Gruß Fips

Dann müsste das ja schon gewesen sein.
Die Umstellung ist am 29.03.2020

Und ja, die RTC macht es nicht von sich aus, du musst den Sketch anpassen.
Wie du schon geschrieben hast, der Stunde eine 1 hinzufügen.

Such doch mal hier im Forum danach, da gibt es einige Beiträge.

Derfips:
Haben wir wohl verpasst. ;D

Dann hoffe ich nur, der Sommer fällt nicht auch noch aus.

Derfips:
Haben wir wohl verpasst. ;D

Gruß Fips

Oh hab es eben auch erst bemerkt xD

HotSystems:
Dann müsste das ja schon gewesen sein.
Die Umstellung ist am 29.03.2020

Und ja, die RTC macht es nicht von sich aus, du musst den Sketch anpassen.
Wie du schon geschrieben hast, der Stunde eine 1 hinzufügen.

Such doch mal hier im Forum danach, da gibt es einige Beiträge.

Alles klar ich schaue dann mal danke.
Aber im endgültigen Sketch? Heißt nicht im Sketch mit der ich die setTime gemacht habe um die Uhr zu stellen

Hey und zwar habe ich jetzt etwas gefunden und zwar hier:[

Dies habe ich bei mir in das Void Setup eingefügt jedoch bekomme ich jetzt die Fehlermeldung:

invalid operands of types '' and 'int' to binary 'operator<'

Ich hoffe ich habe dem Forum entsprechend den Fehlercode eingefügt.

Hier ist außerdem mein gesamter Code ich nehme aber die Version mit weniger Kommentaren sonst wäre es viel zu viel.

#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
boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours);
  if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month>3 || month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month==3 || (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)))
    return true;
  else
    return false;
}

}

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());
 delay(5000); 
 lcd.clear();
}
  
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);
}

Oder ist es falsch wie ich ihn eingefügt habe den Sketch von dem oben dargelegten Forum Post
LG](Time-Libary Sommerzeit/ Winterzeit - Deutsch - Arduino Forum)

Und zwar habe ich den Code jetzt nochmal verändert. Hatte es irgendwie nicht korrekt eingrefügt.

#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

boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
// European Daylight Savings Time calculation by "jurs" for German Arduino Forum
// input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
// return value: returns true during Daylight Saving Time, false otherwise
{
  if (month<3 || month>10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
  if (month>3 && month<10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
  if (month==3 && (hour + 24 * day)>=(1 + tzHours + 24*(31 - (5 * year /4 + 4) % 7)) || month==10 && (hour + 24 * day)<(1 + tzHours + 24*(31 - (5 * year /4 + 1) % 7)))
    return true;
  else
    return false;


}

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());
 delay(5000); 
 lcd.clear();
}
  
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);
}

Jetzt habe ich den Fehler:

a function-definition is not allowed here before '{' token

könnte eventuell einer mal drüber schauen. Weil mir erschließt sich nicht warum diese Fehlermeldung.
Rot makiert ist im Sketch die Zeile unter void printDigits...
Also die Zeile wo nur eine Geschwungene Klammer ist.
Danke falls jemand nochmal drüber schaut
LG

Okay ich weiß nicht ob es an dem Programm lag aber nach neustarten des Programms ging es aufeinmal. Jedoch Zeigt er die momentane Uhrzeit an müsste er nicht die Sommmerzeit schon anzeigen?

Wenn Du Deinen Sketch ordentlich formatierst (+T in der IDE hilft Dir dabei) kann man evtl. die fehlende/falsche } sehen.

Gruß Tommy

Tommy56:
Wenn Du Deinen Sketch ordentlich formatierst (+T in der IDE hilft Dir dabei) kann man evtl. die fehlende/falsche } sehen.

Gruß Tommy

Oh danke das wusste ich nicht.
Aber muss wie oben gesagt nicht trotzdem schon die Sommerzeit angezeigt werden? Da ja deklariert wird das wenn der Monat 3=März nicht sofort egal ob 1.März oder 30.März auf Sommerzeit gesetzt?
LG

Nö, die Umschaltung erfolgt erst in der folgenden Nacht. Am letzten Sonntag März/Oktober um 01/02 Uhr

Gruß Tommy

Okay danke!
Und das macht dieser "Rechner" den ich dort in den Code eingefügt habe automatisch?

LG

Wenn Du ihn richtig eingebunden hast, macht er das.

Gruß Tommy

Alles klar dankeschön. Ich habe nun den Teil des codes einfach in meinen Hauptcode eingefügt:

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

#include <Adafruit_Sensor.h>
#include <LiquidCrystal.h>
// Alle Bibiotheken die benötigt werden werden hier eingefügt und mit #include einbezogen
// Librarys erweitern den Umfang der Arduino-Software
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Es wird festgelegt welche Pins des Mikrocontrollers für das LCD-Dislpay verwendet werden
DHT dht(10, DHT11); // der erste Sensor wird benannt und ab jetzt mit "dht" angesprochen, und es wird die Pin Nummer angegeben mit welcher der DHT11 Sensor auf dem Mikrocontroller angeschlossen ist.
DHT dht1(7, DHT11); // der zweite Sensor wird benannt und mit "dht1" angesprochen. Der zweite Sensor ist an Pin "7" angeschlossen.
void setup()
{
  dht.begin(); //erster Sensor wird gestartet
  dht1.begin(); //zweiter Sensor wird gestartet
  lcd.begin(16, 2); //LCD-Display wird gestartet. Es wird festgelegt wie viele Zeilen und Spalten das LCD-Display hat der Befehl ist lcd.begin("Spalten","Zeilen")
  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
  boolean summertime_EU(int year, byte month, byte day, byte hour, byte tzHours)
  // European Daylight Savings Time calculation by "jurs" for German Arduino Forum
  // input parameters: "normal time" for year, month, day, hour and tzHours (0=UTC, 1=MEZ)
  // return value: returns true during Daylight Saving Time, false otherwise
  {
    if (month < 3 || month > 10) return false; // keine Sommerzeit in Jan, Feb, Nov, Dez
    if (month > 3 && month < 10) return true; // Sommerzeit in Apr, Mai, Jun, Jul, Aug, Sep
    if (month == 3 && (hour + 24 * day) >= (1 + tzHours + 24 * (31 - (5 * year / 4 + 4) % 7)) || month == 10 && (hour + 24 * day) < (1 + tzHours + 24 * (31 - (5 * year / 4 + 1) % 7)))
      return true;
    else
      return false;
  }
}

  void loop()
  {
    // hier wird gesagt, das die Werte die von dem Sensor kommen ausgelesen und zwischengespeichert werden
    int t = dht.readTemperature(); // die Ausgelesenen Werte werden benannt in diesem Fall mit "t=" für die Temperatur
    int h = dht.readHumidity(); //in dem Fall "h=" für Humidity
    //bei diesen beiden Werten wird der erste Sensor angesteuert daher "dht.readTemperature"
    int t1 = dht1.readTemperature(); //Hier werden die Werte des zweiten Sensors ausgelesen und zwischengespeichert
    int h1 = dht1.readHumidity(); // Sie werden ebenfalls benannt aber hier werden sie mit "t1" und "h1" benannt
    //Hier wurde der zweite Sensor ausgelesen dies erkennt man daran, dass dort im Falle der Temperatur "t1=dht1" ausgelesen wird. Am Anfang hatten wir den zweiten Sensor nämlich mit "dht1" benannt.
    //Anzeigen der Werte
    lcd.setCursor(0, 0); //Der Befehl "lcd.setCursor" ist dafür da, dass angegeben wird wo auf dem LCD-Display die Ausgelesenen Werte angezeigt werden. In diesem Fall in der ersten Zeile bei dem ersten Zeichen. Dort steht in beiden Fällen 0 weil beim Zählen mit 0 begonnen wird.
    lcd.print("T1: "); // nun wird der erste ausgelesene Wert benannt wie er auf dem LCD-Display dargstellt wird
    lcd.print(t); // hier wird der erste Wert "Die Temperatur" die wir "t" benannt haben ausgelesen
    lcd.print("'C"); // dies steht hinter dem ausgelesenen Wert soll in dem Fall Grad Celsius sein. Der Arduino kann aber kein Grad Zeichen anzeigen deswegen ein Apostroph.
    // so wie diese Befehle hintereinander stehen werden sie nun auf dem LCD dargestellt in diesem Fall " T1: (ein Wert für die Temperatur)'C "
    lcd.setCursor(0, 1); // gleiches wie oben nur das hier der Wert in der ersten Spalte in der Zweiten Zeile angezeigt wird.
    lcd.print("F1: "); // die Darstellung auf dem LCD Display vor dem ausgelesenen Wert ist "F1: "
    lcd.print(h); //der zweite ausgelesene Wert des DHT wird ausgelesen
    lcd.print("%"); //die Luftfeuchtigkeit wird in Prozent angegeben das Zeichen hierfür steht hinter dem ausgelesenen Wert


    delay(5000); //die ersten ausgelesenen Werte werden 5000 Milisekunden also 5 Sekunden angezeigt und dann kommen die nächsten Werte
    //für diesen Abschnitt gelten die gleichen Kommentare wie für den ersten Sensor.
    lcd.setCursor(0, 0);
    lcd.print("T2: "); //Hier ist der Unterschied nur das wir die zweite Temperatur anders im Display anzeigen lassen in dem Fall mit "T2: "
    lcd.print(t1); //
    lcd.print("'C");
    //die weiteren Unterschiede zum ersten Sensor sind, dass wir hier die Werte "t1" und "h1" auslesen Welche wir oben im Setup für den Zweiten Sensor schon festgelegt haben.
    lcd.setCursor(0, 1);
    lcd.print("F2: ");
    lcd.print(h1);
    lcd.print("%");


    delay(5000); //delay ist eine Verzögerung. Hier werden weitere 5 Sekunden die zweiten Werte angezeigt bevor wir zum nächsten Befehl im voidloop kommen.
    Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
    printDigits(minute()); // auslesen und zwischenspeichern der Uhrzeit Minute und Sekunden
    printDigits(second());
    Serial.print(" "); // beschriebener Wert wird ausgegeben
    Serial.print(day( )); // Wert/Stelle wird als  "day" benannt
    Serial.print(" "); // beschriebener Wert wird ausgegeben
    Serial.print(month()); //Wert/Stelle wird als "month" benannt
    Serial.print(" "); // beschriebener Wert wird ausgegeben
    Serial.print(year()); //Wert/Stelle wird als "year" benannt
    Serial.println();

    lcd.setCursor(0, 0); //gleicher Befehl wie oben bei dem DHT Sensor
    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 noch 3 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.
    //Reihenfolge wie die Werte auf dem LCD Display angezeigt werden sollen
    lcd.print(day()); //Anzeigen des Tages
    lcd.print("."); //Ein Punkt wird zwischen Tag und Monat angezeigt wie es üblich in der Darstellung eines Datums ist
    lcd.print(month()); //Anzeigen des Aktuellen Monats
    lcd.print("."); // Ein Punkt wird zwischen dem Monat und dem Jahr angezeigt
    lcd.print(year()); //Anzeigen des Jahres

    delay(5000);
    lcd.clear(); // leeren beziehungsweise löschen der Daten des LCD-Displays um wieder an den Anfang des voidloop zu springen sodass keine Zeilen/Spalten doppelt beschrieben werden
  }

  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) // wenn eine Zahl kleiner als 10 ist
      Serial.print('0'); //wird eine 0 im Seriellen Monitor davor angeziegt so wie es üblicherweise auch ist
    Serial.print(digits);
    delay(5000);
  }

jedoch kommt nun:

a function-definition is not allowed here before '{' token

Und ich habe es im Arduino Sketch Programm mit Strg+T formatiert und finde den Fehler nicht.

Hi

Jein

Der Funktionsaufruf gibt Dir nur zurück, ob JETZT Sommerzeit ist.
Die Stunde zur Anzeige dazu zählen, musst Du schon selber (dabei aufpassen, daß Du auch 24:34:33 bekommen kannst - dann musst Du sogar noch das Datum anpassen).

Selber würde ich die RTC IMMER in MEZ oder GMT UTC laufen lassen.
Den Rest - also die reine Anzeige für den ablesenden Menschen, würde ich umrechnen.
So hast Du auch keine Probleme mit Dingen, Die kurz vor/nach der Zeitumstellung passieren - in GMT oder MEZ sind die Zeiten eindeutig - erst durch die Sommerzeit bekommen wir eine Stunde doppelt, dafür fehlt eine Andere komplett.

Wer sich nicht merken kann, wie herum die Uhr verstellt wird:
Wenn die Stühle VOR das Cafe gestellt werden (es wird Sommer) - werden die Uhren VOR gestellt.
Wenn die Stühle wieder ZURÜCK ins Cafe gestellt werden (draußen wird's langsam kalt), wird die Uhr ZURÜCK gestellt.

... schauen wir, wie lange noch ... eigentlich hoffe ich ja, daß die Petition zur Zeitumstellung damals nicht beachtet wird ... das blöde Volk hat für 'Immer Sommerzeit' gestimmt ... klingt ja auch logisch - ist direkt viel wärmer dann ... blödes Volk, Blödes!
(meine Stimme war Immer Winterzeit - wäre außerdem hier die Normalzeit, also MEZ)

MfG

void printDigits(int digits)
steht INNERHELB von loop().

Funktionen dürfen nicht INNERHALB von anderen Funktionen stehen.

MfG

... sollte eigentlich ein EDIT werden ... blödes Volk :wink:

postmaster-ino:
Hi

Jein

Der Funktionsaufruf gibt Dir nur zurück, ob JETZT Sommerzeit ist.
Die Stunde zur Anzeige dazu zählen, musst Du schon selber (dabei aufpassen, daß Du auch 24:34:33 bekommen kannst - dann musst Du sogar noch das Datum anpassen).

Selber würde ich die RTC IMMER in MEZ oder GMT UTC laufen lassen.
Den Rest - also die reine Anzeige für den ablesenden Menschen, würde ich umrechnen.
So hast Du auch keine Probleme mit Dingen, Die kurz vor/nach der Zeitumstellung passieren - in GMT oder MEZ sind die Zeiten eindeutig - erst durch die Sommerzeit bekommen wir eine Stunde doppelt, dafür fehlt eine Andere komplett.

Wer sich nicht merken kann, wie herum die Uhr verstellt wird:
Wenn die Stühle VOR das Cafe gestellt werden (es wird Sommer) - werden die Uhren VOR gestellt.
Wenn die Stühle wieder ZURÜCK ins Cafe gestellt werden (draußen wird's langsam kalt), wird die Uhr ZURÜCK gestellt.

... schauen wir, wie lange noch ... eigentlich hoffe ich ja, daß die Petition zur Zeitumstellung damals nicht beachtet wird ... das blöde Volk hat für 'Immer Sommerzeit' gestimmt ... klingt ja auch logisch - ist direkt viel wärmer dann ... blödes Volk, Blödes!
(meine Stimme war Immer Winterzeit - wäre außerdem hier die Normalzeit, also MEZ)

MfG

Heißt er zeigt trotzdem noch nicht die Sommerzeit an? Und wie mache ich das dann das die Sommerzeit mir angezeigt wird?

Hi

anzeigetag=tag;
anzeigestunde=stunde+(sommerzeit);
... müsste man Mal testen, ob die Klammer bei true als 1 gewertet wird ...
sonst
anzeigetag=tag;
anzeigezeit=stunde+(sommerzeit)?1:0;

Dann musst Du noch auf >23 prüfen:
if (anzeigezeit>23){
anzeigezeit-=24;
anzeigetag++;
}

Dabei kann sich natürlich auch der Monat noch ändern ... ein Rattenschwanz ... aber dann ist's auch schon vorbei.

MfG

postmaster-ino:
Hi

anzeigetag=tag;
anzeigestunde=stunde+(sommerzeit);
... müsste man Mal testen, ob die Klammer bei true als 1 gewertet wird ...
sonst
anzeigetag=tag;
anzeigezeit=stunde+(sommerzeit)?1:0;

Dann musst Du noch auf >23 prüfen:
if (anzeigezeit>23){
anzeigezeit-=24;
anzeigetag++;
}

Dabei kann sich natürlich auch der Monat noch ändern ... ein Rattenschwanz ... aber dann ist's auch schon vorbei.

MfG

Das verstehe ich irgendwie als Neuling nicht richtig.

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

#include <Adafruit_Sensor.h>
#include <LiquidCrystal.h>
// Alle Bibiotheken die benötigt werden werden hier eingefügt und mit #include einbezogen
// Librarys erweitern den Umfang der Arduino-Software
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Es wird festgelegt welche Pins des Mikrocontrollers für das LCD-Dislpay verwendet werden
DHT dht(10, DHT11); // der erste Sensor wird benannt und ab jetzt mit "dht" angesprochen, und es wird die Pin Nummer angegeben mit welcher der DHT11 Sensor auf dem Mikrocontroller angeschlossen ist.
DHT dht1(7, DHT11); // der zweite Sensor wird benannt und mit "dht1" angesprochen. Der zweite Sensor ist an Pin "7" angeschlossen.
void setup()
{
  dht.begin(); //erster Sensor wird gestartet
  dht1.begin(); //zweiter Sensor wird gestartet
lcd.begin(16, 2); //LCD-Display wird gestartet. Es wird festgelegt wie viele Zeilen und Spalten das LCD-Display hat der Befehl ist lcd.begin("Spalten","Zeilen")
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()
{
  // hier wird gesagt, das die Werte die von dem Sensor kommen ausgelesen und zwischengespeichert werden 
  int t = dht.readTemperature(); // die Ausgelesenen Werte werden benannt in diesem Fall mit "t=" für die Temperatur
  int h = dht.readHumidity(); //in dem Fall "h=" für Humidity
  //bei diesen beiden Werten wird der erste Sensor angesteuert daher "dht.readTemperature"
  int t1 = dht1.readTemperature(); //Hier werden die Werte des zweiten Sensors ausgelesen und zwischengespeichert
  int h1 = dht1.readHumidity(); // Sie werden ebenfalls benannt aber hier werden sie mit "t1" und "h1" benannt
 //Hier wurde der zweite Sensor ausgelesen dies erkennt man daran, dass dort im Falle der Temperatur "t1=dht1" ausgelesen wird. Am Anfang hatten wir den zweiten Sensor nämlich mit "dht1" benannt.
  //Anzeigen der Werte
  lcd.setCursor(0,0); //Der Befehl "lcd.setCursor" ist dafür da, dass angegeben wird wo auf dem LCD-Display die Ausgelesenen Werte angezeigt werden. In diesem Fall in der ersten Zeile bei dem ersten Zeichen. Dort steht in beiden Fällen 0 weil beim Zählen mit 0 begonnen wird.
  lcd.print("T1: "); // nun wird der erste ausgelesene Wert benannt wie er auf dem LCD-Display dargstellt wird
  lcd.print(t); // hier wird der erste Wert "Die Temperatur" die wir "t" benannt haben ausgelesen
  lcd.print("'C"); // dies steht hinter dem ausgelesenen Wert soll in dem Fall Grad Celsius sein. Der Arduino kann aber kein Grad Zeichen anzeigen deswegen ein Apostroph.
 // so wie diese Befehle hintereinander stehen werden sie nun auf dem LCD dargestellt in diesem Fall " T1: (ein Wert für die Temperatur)'C "
  lcd.setCursor(0,1); // gleiches wie oben nur das hier der Wert in der ersten Spalte in der Zweiten Zeile angezeigt wird.
  lcd.print("F1: "); // die Darstellung auf dem LCD Display vor dem ausgelesenen Wert ist "F1: "
  lcd.print(h); //der zweite ausgelesene Wert des DHT wird ausgelesen
  lcd.print("%"); //die Luftfeuchtigkeit wird in Prozent angegeben das Zeichen hierfür steht hinter dem ausgelesenen Wert
 
 
  delay(5000); //die ersten ausgelesenen Werte werden 5000 Milisekunden also 5 Sekunden angezeigt und dann kommen die nächsten Werte
   //für diesen Abschnitt gelten die gleichen Kommentare wie für den ersten Sensor.
  lcd.setCursor(0,0); 
  lcd.print("T2: "); //Hier ist der Unterschied nur das wir die zweite Temperatur anders im Display anzeigen lassen in dem Fall mit "T2: "
  lcd.print(t1); // 
  lcd.print("'C");
 //die weiteren Unterschiede zum ersten Sensor sind, dass wir hier die Werte "t1" und "h1" auslesen Welche wir oben im Setup für den Zweiten Sensor schon festgelegt haben.
  lcd.setCursor(0,1); 
  lcd.print("F2: ");
  lcd.print(h1);
  lcd.print("%");
 
 
  delay(5000); //delay ist eine Verzögerung. Hier werden weitere 5 Sekunden die zweiten Werte angezeigt bevor wir zum nächsten Befehl im voidloop kommen.
Serial.print(hour()); //Serial.print ist der Befehl etwas im seriellen Monitor anzuzeigen (Stunde, Minute, Sekunde, Leerzeichen, Tag, Leerzeichen, usw.)
printDigits(minute()); // auslesen und zwischenspeichern der Uhrzeit Minute und Sekunden
printDigits(second()); 
Serial.print(" "); // beschriebener Wert wird ausgegeben
Serial.print(day( )); // Wert/Stelle wird als  "day" benannt
Serial.print(" "); // beschriebener Wert wird ausgegeben
Serial.print(month()); //Wert/Stelle wird als "month" benannt
Serial.print(" "); // beschriebener Wert wird ausgegeben
Serial.print(year()); //Wert/Stelle wird als "year" benannt
Serial.println();

lcd.setCursor(0,0); //gleicher Befehl wie oben bei dem DHT Sensor
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 noch 3 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.
//Reihenfolge wie die Werte auf dem LCD Display angezeigt werden sollen
lcd.print(day()); //Anzeigen des Tages
lcd.print("."); //Ein Punkt wird zwischen Tag und Monat angezeigt wie es üblich in der Darstellung eines Datums ist
lcd.print(month()); //Anzeigen des Aktuellen Monats
lcd.print("."); // Ein Punkt wird zwischen dem Monat und dem Jahr angezeigt
lcd.print(year()); //Anzeigen des Jahres

 delay(5000); 
 lcd.clear(); // leeren beziehungsweise löschen der Daten des LCD-Displays um wieder an den Anfang des voidloop zu springen sodass keine Zeilen/Spalten doppelt beschrieben werden
}
  
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) // wenn eine Zahl kleiner als 10 ist
Serial.print('0'); //wird eine 0 im Seriellen Monitor davor angeziegt so wie es üblicherweise auch ist
Serial.print(digits);
delay(5000);
}

Kannst du es bitte mithilfe meines Code nochmal erklären weil ich nutze ja anstatt Anzeigetag andere Namen wahrscheinlich verstehe ich es deswegen nicht
LG