#include <U8glib.h>
#include <RTClib.h>
U8GLIB_SSD1306_128X64 u8g;
RTC_DS1307 rtc;
int hour;
int minute;
int second;
int clockcenterX = 50;
int clockcenterY = 40;
void setup()
{
Serial.begin(115200);
Serial.setTimeout(5000);
if (!rtc.begin())
{
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
// taking input from serial moniter
Serial.println("Enter Hour");
while (Serial.available() == 0) {}
hour = Serial.parseInt();
Serial.println(hour);
Serial.println("Enter minute");
while (Serial.available() == 0) {}
minute = Serial.parseInt();
Serial.println(minute);
Serial.println("Enter second");
while (Serial.available() == 0) {}
second = Serial.parseInt();
Serial.println(second);
u8g.setFont(u8g_font_7x13);
rtc.adjust(DateTime(2021, 9, 27, hour, minute, second));
}
void loop()
{
// taking time from rtc
DateTime now = rtc.now();
String hour = String ( now.hour(), DEC);
String minute = String ( now.minute(), DEC);
String second = String ( now.second(), DEC);
u8g.firstPage();
do
{
// creating analog clock
u8g.drawStr(0, 10, hour.c_str());
u8g.drawStr(20, 10, ":");
u8g.drawStr(30, 10, minute.c_str());
u8g.drawStr(50, 10, ":");
u8g.drawStr(60, 10, second.c_str());
u8g.drawCircle(clockcenterX, clockcenterY, 20);
u8g.drawCircle(clockcenterX, clockcenterY, 1);
u8g.drawCircle(clockcenterX, clockcenterY, 17);
drawSec(now.second());
drawMin(now.minute());
drawHour(now.hour(), now.minute());
for (int d = 0 ; d < 12; d++)
{
drawMark(d);
}
}
while (u8g.nextPage());
u8g.setColorIndex(1);
}
// making of digital clock
void drawMark(int d)
{
float X_1, Y_1, X_2, Y_2;
d = d * 30;
d = d + 270;
X_1 = 17 * cos(d * 0.0175);
Y_1 = 17 * sin(d * 0.0175);
X_2 = 20 * cos(d * 0.0175);
Y_2 = 20 * sin(d * 0.0175);
u8g.drawLine(X_1 + clockcenterX, Y_1 + clockcenterY, X_2 + clockcenterX, Y_2 + clockcenterY);
}
void drawSec(int s)
{
float x1, y1 ;
s = s * 6;
s = s + 270;
x1 = 15 * cos(s * 0.0175);
y1 = 15 * sin(s * 0.0175);
u8g.drawLine(x1 + clockcenterX, y1 + clockcenterY, clockcenterX, clockcenterY);
}
void drawMin(int m)
{
float x1, y1;
m = m * 6;
m = m + 270;
x1 = 13 * cos(m * 0.0175);
y1 = 13 * sin(m * 0.0175);
u8g.drawLine(x1 + clockcenterX, y1 + clockcenterY, clockcenterX, clockcenterY);
}
void drawHour(int h, int m)
{
float x1, y1;
h = (h * 30) + (m / 2);
h = h + 270;
x1 = 12 * cos(h * 0.0175);
y1 = 12 * sin(h * 0.0175);
u8g.drawLine(x1 + clockcenterX, y1 + clockcenterY, clockcenterX, clockcenterY);
}