#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <RTClib.h>
#include <AccelStepper.h>
// Inicializácia LCD displeja
LiquidCrystal_I2C lcd(0x27, 16, 2); // Adresa displeja, počet stĺpcov, počet riadkov
// Inicializácia RTC modulu
RTC_DS1307 rtc;
// Inicializácia krokových motorov
AccelStepper stepper1(AccelStepper::DRIVER, 2, 3);
AccelStepper stepper2(AccelStepper::DRIVER, 4, 5);
// LED piny
#define LED_PIN1 6
#define LED_PIN2 7
void setup() {
// Inicializácia displeja
lcd.begin(16, 2); // Počet stĺpcov a riadkov
lcd.backlight();
lcd.clear();
// Inicializácia RTC
if (!rtc.begin()) {
lcd.print("Couldn't find RTC");
while (1);
}
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
// Inicializácia krokových motorov
stepper1.setMaxSpeed(1000);
stepper1.setAcceleration(100);
stepper2.setMaxSpeed(1000);
stepper2.setAcceleration(100);
// Inicializácia LED
pinMode(LED_PIN1, OUTPUT);
pinMode(LED_PIN2, OUTPUT);
}
void loop() {
DateTime now = rtc.now();
// Zobrazenie času na LCD displeji
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(now.hour(), DEC);
lcd.print(':');
lcd.print(now.minute(), DEC);
lcd.print(':');
lcd.print(now.second(), DEC);
// Ovládanie krokových motorov pre reálne hodiny
int secondStep = (now.second() * (200 / 60)) * -1; // otočíme smer otáčania
int minuteStep = (now.minute() * (200 / 60)) * -1; // otočíme smer otáčania
stepper1.moveTo(secondStep);
stepper2.moveTo(minuteStep);
stepper1.run();
stepper2.run();
// Ovládanie LED
if (now.second() == 0) {
digitalWrite(LED_PIN1, HIGH);
} else {
digitalWrite(LED_PIN1, LOW);
}
if (now.second() % 2 == 0) { // LED2 bude blikať s každým druhým krokom sekundovej ručičky
digitalWrite(LED_PIN2, HIGH);
} else {
digitalWrite(LED_PIN2, LOW);
}
delay(100); // Malé oneskorenie na stabilizáciu
}