#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Servo.h>
#include <RTClib.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS3231 rtc;
Servo hourServo, minuteServo;
void setup() {
Wire.begin();
Serial.begin(9600);
hourServo.attach(9);
minuteServo.attach(10);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(2000);
display.clearDisplay();
rtc.begin();
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
void loop() {
DateTime now = rtc.now();
int hour = now.hour()+2; // Use modulo 24 to get the 24-hour format
int minute = now.minute();
// Map the hour to the servo angle range (0 to 360 degrees)
hourServo.write(map(hour, 0, 12, 0, 360));
// Map the minute to the servo angle range (0 to 360 degrees)
minuteServo.write(map(minute, 0, 60, 0, 360));
displayTime(hour, minute);
}
void displayTime(int hour, int minute) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print(F("Time: "));
Serial.print(F("Time: "));
if (hour < 10) display.print(F("0"));
display.print(hour);
Serial.print(hour);
display.print(F(":"));
Serial.print(":");
if (minute < 10) display.print(F("0"));
if (minute < 10) Serial.print(F("0"));
display.println(minute);
Serial.println(minute);
display.display();
}