#include <Wire.h>
#include <RTClib.h>
#include <FastLED.h>
// Pins für Neopixel
#define H1_PIN 6
#define H0_PIN 5
#define M1_PIN 4
#define M0_PIN 3
// LED-Arrays
#define H1_LEDS 4
#define H0_LEDS 4
#define M1_LEDS 11
#define M0_LEDS 4
CRGB h1Stripe[H1_LEDS];
CRGB h0Stripe[H0_LEDS];
CRGB m1Stripe[M1_LEDS];
CRGB m0Stripe[M0_LEDS];
RTC_DS1307 rtc;
void setup() {
// Serial Monitor
Serial.begin(9600);
// RTC Initialisierung
if (!rtc.begin()) {
Serial.println("RTC nicht gefunden!");
while (1);
}
if (!rtc.isrunning()) {
Serial.println("RTC läuft nicht, stelle aktuelle Zeit ein.");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// LEDs initialisieren
FastLED.addLeds<WS2812B, H1_PIN, GRB>(h1Stripe, H1_LEDS);
FastLED.addLeds<WS2812B, H0_PIN, GRB>(h0Stripe, H0_LEDS);
FastLED.addLeds<WS2812B, M1_PIN, GRB>(m1Stripe, M1_LEDS);
FastLED.addLeds<WS2812B, M0_PIN, GRB>(m0Stripe, M0_LEDS);
}
void loop() {
DateTime now = rtc.now();
Serial.print("Stunde: ");
Serial.print(now.hour());
Serial.print(", Minute: ");
Serial.println(now.minute());
showHours(now.hour());
showMinutes(now.minute());
FastLED.show();
delay(60000);
}
void showHours(byte hours) {
// Stunden LEDs zurücksetzen
fill_solid(h1Stripe, H1_LEDS, CRGB::Black);
fill_solid(h0Stripe, H0_LEDS, CRGB::Black);
// Zehnerstelle der Stunde (h1Stripe)
if (hours >= 5) h1Stripe[0] = CRGB::Red;
if (hours >= 10) h1Stripe[1] = CRGB::Red;
if (hours >= 15) h1Stripe[2] = CRGB::Red;
if (hours >= 20) h1Stripe[3] = CRGB::Red;
// Einerstelle der Stunde (h0Stripe)
byte remainder = hours % 5;
for (int i = 0; i < remainder; i++) {
h0Stripe[i] = CRGB::Red;
}
}
void showMinutes(byte minutes) {
// Minuten LEDs zurücksetzen
fill_solid(m1Stripe, M1_LEDS, CRGB::Black);
fill_solid(m0Stripe, M0_LEDS, CRGB::Black);
// Zehnerstelle der Minuten (m1Stripe)
int ledCount = map(minutes, 0, 55, 0, M1_LEDS);
for (int i = 0; i < ledCount; i++) {
m1Stripe[i] = (i % 3 == 2) ? CRGB::Red : CRGB::Yellow; // Jeder dritte LED rot
}
// Einerstelle der Minuten (m0Stripe)
byte remainder = minutes % 5;
for (int i = 0; i < remainder; i++) {
m0Stripe[i] = CRGB::Yellow;
}
}