#include <FastLED.h>
#include <DS3231.h>
#include <Wire.h>
#define NUM_LEDS 58
#define DATA_PIN 9
CRGB leds[NUM_LEDS];
DS3231 rtc;
bool rainbow =0;
unsigned long t;
const int TOTAL_SEGMENTS = 4; //Ogólna liczba segmentów
const int LEDS_PER_SEGMENT = 14; // Liczba diod przypadająca na jeden segment
const int DISPLAY_SEGMENT[] = {0, 14, 14 * 2 + 2, 14 * 3 + 2}; //Pozycje początkowe danych ledów
const int DISPLAY_NUMBER[][14] = { //W przypadku true świeci,w przypadku false nie świeci
{1,1,1,1,1,1,1,1,1,1,1,1,0,0}, // 0
{0,0,1,1,1,1,0,0,0,0,0,0,0,0}, // 1
{1,1,1,1,0,0,1,1,1,1,0,0,1,1}, // 2
{1,1,1,1,1,1,1,1,0,0,0,0,1,1}, // 3
{0,0,1,1,1,1,0,0,0,0,1,1,1,1}, // 4
{1,1,0,0,1,1,1,1,0,0,1,1,1,1}, // 5
{1,1,0,0,1,1,1,1,1,1,1,1,1,1}, // 6
{1,1,1,1,1,1,0,0,0,0,0,0,0,0}, // 7
{1,1,1,1,1,1,1,1,1,1,1,1,1,1}, // 8
{1,1,1,1,1,1,1,1,0,0,1,1,1,1}, // 9
};
int red = 255;
int green = 0;
int blue = 0;
char currentFade = 'r';
void setup() {
Serial.begin(9600);
Serial.println("Starting execution");
FastLED.addLeds<NEOPIXEL, DATA_PIN>(leds, NUM_LEDS);
FastLED.setBrightness(255); //Ustawienie najniższej jasności
Wire.begin();
// Aby ustawić godzinę usuwamy ukośniki z dwóch poniższych linii
//rtc.setHour(15); // Ustawienie godziny na 15 (format 24 godzinny)
//rtc.setMinute(12); // Ustawienie minut na 12
}
void loop() {
bool h12, pm;
int hour = rtc.getHour(h12, pm); //Pobieranie z modułu RTC godziny
int minute = rtc.getMinute(); //Pobieranie z modułu RTC minut
int hourFirstDigit = hour / 10; //Pobieranie z modułu RTC pierwszego znaku godziny
int hourSecondDigit = hour % 10; //Pobieranie z modułu RTC drugiego znaku godziny
int minuteFirstDigit = minute / 10; //Pobieranie z modułu RTC pierwszego znaku minut
int minuteSecondDigit = minute % 10; //Pobieranie z modułu RTC drugiego znaku minut
int totalDelay = 0;
while (totalDelay < 10000) { // 10 sekund
if (currentFade == 'r') { //Jeśli zanika kolor czerwony
red--;
green++;
currentFade = red <= 0 ? 'g' : 'r'; //Zmiana koloru
} else if (currentFade == 'g') { //Jeśli zanika kolor zielony
green--;
blue++;
currentFade = green <= 0 ? 'b' : 'g'; //Zmiana koloru
} else { //Jeśli zanika kolor niebieski
blue--;
red++;
currentFade = blue <= 0 ? 'r' : 'b'; //Zmiana koloru
}
FastLED.clear(); //"Wyczyszczenie" ledów
displayNumber(0, hourFirstDigit);
displayNumber(1, hourSecondDigit);
displayNumber(2, minuteFirstDigit);
displayNumber(3, minuteSecondDigit);
leds[14 * 2].setRGB(red, green, blue); //Podświetlenie kropek
leds[14 * 2 + 1].setRGB(red, green, blue);
FastLED.show(); //Wyświetlenie ostatecznej konfiguracji
delay(10);
totalDelay += 10;
}
}
void displayNumber(int segment, int number) {
for (int j = 0; j < LEDS_PER_SEGMENT; j++) { //Zapętlanie nad diodami w określonych segmentach
if (DISPLAY_NUMBER[number][j]) { //Wyznaczenie diod które powinny się świecić
leds[DISPLAY_SEGMENT[segment] + j].setRGB(red, green, blue); //Włączenie diod
}
if(millis()-t<7000){
for(int i=0;i<NUM_LEDS;i++){
leds[49] = CRGB(0,0,0);//dinh dang dung la CRGB(blue, red, green).
}
}
}
}