Code-Beratung: Mein DS1307 spinnt :)

Hallo liebe Leute,

könnt ihr mir bei meinem kleinen Problem helfen? In meinem Sketch (Modellhausbeleuchtung) kriege ich ein Problem mit der Uhrzeit. Starte ich den seriellen Monitor, startet die Uhrzeitausgabe immer wieder von Erstellungszeitpunkt des Sketches.
Heute Nachmittag war die Uhr grad bei Mitternacht !?

#include <Wire.h>		//Uhr
#include "RTClib.h"		//Uhr
#include "FastLED.h"	//LED
#define NUM_LEDS 21
#define DATA_PIN 11
#define CLOCK_PIN 13

RTC_DS1307 rtc;
/*
LED[0]  Wlohnzimmer Terasse (=vorne)
LED[1]  Wohnzimmer hinten
LED[2]  Bad unten
LED[3]  Hauswirtschaftsraum
LED[4]  Flur unten
LED[5]  Küche
LED[6]  Küche Seite (=Küche)
LED[7]  Fernseher unten
LED[8]  Wohnzimmer vorne
LED[9]  Schlafzimmer
LED[10] Fernseher oben
LED[11] Geertje/Wolle
LED[12] mittlerer Flur
LED[13] Amelie
LED[14] Bad oben
LED[15] Arbeitszimmer
LED[16] Felix
LED[17] Flur oben
LED[18] Friedemann
*/

CRGB leds[NUM_LEDS];

void setup() {

  //Uhr:
  Serial.begin(57600);
#ifdef AVR
  Wire.begin();
#else
  Wire1.begin(); // Shield I2C pins connect to alt I2C bus on Arduino Due
#endif
  rtc.begin();
  
  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));

  //LED
  FastLED.addLeds<WS2801, RGB>(leds, NUM_LEDS);
}

void loop() {
  
  for(int i = 0; i<NUM_LEDS; i++)                            {leds[i]=CRGB::Black;}

  DateTime now = rtc.now();
  
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(' ');
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

 //LED 0/8 Wohnzimmer
 if (now.hour()>=18 || now.hour()<=1)                        {leds[0]=0xfcf9d6; leds[8]=0xfcf9d6;}
 if (now.hour()==6 && now.minute()>=15)                      {leds[0]=0xffffff; leds[8]=0xffffff;}
 if (now.hour()==7)                                          {leds[0]=0xffffff; leds[8]=0xffffff;}
 
 //LED 1 Wohnzimmer hinten
 if (now.hour()>=20 && now.hour()<=21)                       {leds[1]=0xffffff;}
 if (now.hour()==22 && now.minute()>=30 && now.minute()<=44) {leds[1]=0xffffff;}
 if (now.hour()==6 && now.minute()>=15 && now.minute()<=44)  {leds[1]=0xffffff;}
 
 ...
....
...


 //LED 16 Felix' Zimmer
 if (now.hour()>=18 && now.hour()<=19)                       {leds[16]=0xffffff;}
 if (now.hour()==21 && now.hour()>=30 && now.hour()<=31)     {leds[16]=0xffffff;}
 if (now.hour()==0 && now.hour()<=44)                        {leds[16]=0xffffff;}
 
 //Led 17 Flur oben
 if (now.hour()>=18 && now.hour()<=19)                       {leds[17]=0xffffff;}
 if (now.hour()==22 && now.minute()<=30)                     {leds[17]=0xffffff;}
 if (now.hour()==23)                                         {leds[17]=0xffffff;}
 if (now.hour()>=0 && now.hour()<=1)                         {leds[17]=0xffffff;}
 if (now.hour()==2 && now.minute()>=14 && now.minute()<=15)  {leds[17]=0xffffff;}
 if (now.hour()==3 && now.minute()>=44 && now.minute()<=45)  {leds[17]=0xffffff;}
 
 //Led 18 Friedemann
 if (now.hour()>=18 || now.hour()<=1)                        {leds[18]=0xffffff;}
 
 leds[19]=0xf2bb15; //nur zum testen neuer Farbwerte
 leds[20]=0x0a0700; //nur zum testen neuer Farbwerte
 
  FastLED.show();
  //delay(1000);
}

Ist bestimmt nur was ganz Blödes. Hab mir di eCode-Schnipsel aus nem Exampel der RTClib geschnappt und eingefügt.

Für eure Hilfe bin ich sehr dankbar!

Gruß
Friedemann

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

DATE und TIME sind Makros. Die geben dir den Kompilier-Zeitpunkt zurück. Und du stellst das immer wieder darauf ein

friede: Starte ich den seriellen Monitor, startet die Uhrzeitausgabe immer wieder von Erstellungszeitpunkt des Sketches.

Stimmt.

Genau so hast Du es programmiert:

 rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));

Wenn Du die Zeit damit einmalig gestellt hast, würde ich die Zeile anschließend im Code auskommentieren und den Code sofort nochmal ohne diese Zeile auf Dein Gerät hochladen.

Vielen Dank!

Jetzt läuft es einwandfrei. Dieses Forum ist toll!