#include <Wire.h>
#include <RTClib.h>
#define RED_PIN 9
#define GREEN_PIN 10
#define BLUE_PIN 11
RTC_DS3231 rtc;
int dawnStartHour, dawnStartMinute, dawnStartSecond;
int dawnDurationSeconds;
bool simulateDawn = false;
void setup() {
Serial.begin(9600);
// Настройка RTC модуля
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if (rtc.lostPower()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Настройка пинов RGB LED
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
// Начальный эффект плавного переливания цветами
for (int i = 0; i < 256; i++) {
setColor(i, 255 - i, i / 2); // Плавный переход от одного цвета к другому
delay(20);
}
delay(5000); // Ждем 5 секунд
// Ввод времени начала рассвета
Serial.println("Введите время начала рассвета (час, минута, секунда) через пробел:");
while (!Serial.available()) {
// Ждем, пока пользователь введет данные
}
String input = Serial.readStringUntil('\n');
sscanf(input.c_str(), "%d %d %d", &dawnStartHour, &dawnStartMinute, &dawnStartSecond);
// Ввод длительности рассвета
Serial.println("Введите длительность рассвета (часы, минуты, секунды) через пробел:");
while (!Serial.available()) {
// Ждем, пока пользователь введет данные
}
input = Serial.readStringUntil('\n');
int dawnDurationHours, dawnDurationMinutes, dawnDurationSecondsInput;
sscanf(input.c_str(), "%d %d %d", &dawnDurationHours, &dawnDurationMinutes, &dawnDurationSecondsInput);
dawnDurationSeconds = dawnDurationHours * 3600 + dawnDurationMinutes * 60 + dawnDurationSecondsInput;
Serial.println("Настройки приняты. Симуляция рассвета начнется в заданное время.");
// Мигаем фиолетовым цветом 3 раза
for (int i = 0; i < 3; i++) {
setColor(128, 0, 128); // Фиолетовый цвет
delay(500);
setColor(0, 0, 0);
delay(500);
}
}
void loop() {
DateTime now = rtc.now();
int currentHour = now.hour();
int currentMinute = now.minute();
int currentSecond = now.second();
if (!simulateDawn && currentHour == dawnStartHour && currentMinute == dawnStartMinute && currentSecond == dawnStartSecond) {
simulateDawn = true;
}
if (simulateDawn) {
for (int i = 0; i < dawnDurationSeconds * 100; i++) {
int brightness = map(i, 0, dawnDurationSeconds * 100, 0, 255);
setColor(brightness, brightness, 0); // Плавный переход к желтому цвету
delay(10); // Пауза для плавного изменения цвета
}
simulateDawn = false;
// Задержка 6 секунд на окончательном оттенке желтого цвета
setColor(255, 255, 0);
delay(6000);
// Мигаем фиолетовым цветом 3 раза
for (int i = 0; i < 3; i++) {
setColor(128, 0, 128); // Фиолетовый цвет
delay(500);
setColor(0, 0, 0);
delay(500);
}
// Выключаем светодиод
setColor(0, 0, 0);
}
delay(1000); // Основной цикл задержки
}
void setColor(int red, int green, int blue) {
analogWrite(RED_PIN, red);
analogWrite(GREEN_PIN, green);
analogWrite(BLUE_PIN, blue);
}