Gültigkeit von Klassenobjekten

Hallo,
ich habe ein Problem mit meiner RTC. Der Sketch sieht folgendermaßen aus.

// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include "RTClib.h"

RTC_DS1307 rtc;
DateTime future;   
DateTime LetzteMesszeit;

void setup () {
  while (!Serial); // for Leonardo/Micro/Zero

  Serial.begin(9600);
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (! rtc.isrunning()) {
    Serial.println("RTC is NOT running!");
    // following line sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  
    DateTime LetzteMesszeit = rtc.now();
    
    Serial.print("Letzte Messung setup   ");
    Serial.println(LetzteMesszeit.unixtime());
    Serial.print(LetzteMesszeit.day());
    Serial.print(F("."));
    Serial.print(LetzteMesszeit.month());
    Serial.print(F("."));
    Serial.print(LetzteMesszeit.year());
    Serial.print(F("  "));
    Serial.print(LetzteMesszeit.hour());
    Serial.print(F(":"));
    Serial.print(LetzteMesszeit.minute());
    Serial.print(F(":"));
    Serial.println(LetzteMesszeit.second());

    DateTime future (LetzteMesszeit + TimeSpan(0,0,0,10));
    Serial.print("Future setup");
    Serial.println(future.unixtime());
    Serial.print(future.day());
    Serial.print(F("."));
    Serial.print(future.month());
    Serial.print(F("."));
    Serial.print(future.year());
    Serial.print(F("  "));
    Serial.print(future.hour());
    Serial.print(F(":"));
    Serial.print(future.minute());
    Serial.print(F(":"));
    Serial.println(future.second());
    

}

void loop () {
    //DateTime LetzteMesszeit = rtc.now();                       
    //DateTime future (LetzteMesszeit + TimeSpan(0,0,0,10));     
    

    Serial.print("Letzte Messung loop   ");
    Serial.println(LetzteMesszeit.unixtime());
    Serial.print(LetzteMesszeit.day());
    Serial.print(F("."));
    Serial.print(LetzteMesszeit.month());
    Serial.print(F("."));
    Serial.print(LetzteMesszeit.year());
    Serial.print(F("  "));
    Serial.print(LetzteMesszeit.hour());
    Serial.print(F(":"));
    Serial.print(LetzteMesszeit.minute());
    Serial.print(F(":"));
    Serial.println(LetzteMesszeit.second());

    Serial.print("Future loop");
    Serial.println(future.unixtime());
    Serial.print(future.day());
    Serial.print(F("."));
    Serial.print(future.month());
    Serial.print(F("."));
    Serial.print(future.year());
    Serial.print(F("  "));
    Serial.print(future.hour());
    Serial.print(F(":"));
    Serial.print(future.minute());
    Serial.print(F(":"));
    Serial.println(future.second());

    delay(5000);
}

Die Ausgabe an der seriellen Schnittstelle lautet:
Letzte Messung setup 1577984236
2.1.2020 16:57:16
Future setup1577984246
2.1.2020 16:57:26
Letzte Messung loop 946684800
1.1.2000 0:0:0
Future loop946684800
1.1.2000 0:0:0

Woran liegt es, dass im loop die Uhrzeit nicht mehr vorhanden ist. Ich habe mich etwas eingelesen. DateTime ist ja kein Datentyp sondern eine Klasse.
Wie muss ich jetzt das Klassenobjekt "LetzteMesszeit" richtig erstellen, dass es sowohl in setup als auch in loop verfügbar ist.
Oder liegt der Fehler woanders ?

Vielen Dank schonmal
ArduinoArti

Das ist auch nicht anders wie bei jeder anderen Variablen auch. Klassen sind “nur” selbst definierte Datentypen.

DateTime LetzteMesszeit = rtc.now();

Hier erstellt du eine lokale Variable mit dem gleichen Namen wie die globale. Und überdeckst damit die globale Version. Das passiert auch mit elementaren Datentypen wie int

Einfach das “DateTime” da weglassen. Das Objekt wurde doch schon global erstellt

Danke. Das war mir nicht klar, dass ich eine zusätzlich lokale Variable erstelle.
Problem gelöst. :smiley: