#include <Adafruit_SSD1306.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <avr/pgmspace.h>
RTC_DS1307 rtc;
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4
bool var = false;
int Btn1 = 2;
float timeHour,timeMin,timeSec,secDegree,minDegree,hourDegree;
int timeHour1,timeMin1,timeSec1;
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup()
{
Serial.begin(9600);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3D)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
pinMode(Btn1, INPUT);
attachInterrupt(digitalPinToInterrupt(Btn1), code, RISING);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT0 = 0;
TCCR1B |= B00000100;
TIMSK1 |= B00000010;
OCR1A = 6250;
sei();
}
void loop(){
DateTime now = rtc.now();
if (var == true)
{
display.clearDisplay();
display.setTextSize(1); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE); // Draw white text
display.setCursor(0, 0); // Start at top-left corner
display.cp437(true); // Use full 256 char 'Code Page 437' font
timeHour1 = (now.hour());
timeMin1 = (now.minute());
timeSec1 = (now.second());
if (timeHour1 < 10)
{
display.print("0");
}
display.print(timeHour1);
display.print(':');
if (timeMin1 < 10)
{
display.print("0");
}
display.print(timeMin1);
display.print(':');
if (timeSec < 10)
{
display.print("0");
}
display.print(timeSec1);
display.display();
delay(1000);
}
else
{
int c_width = display.width()/2;
int c_height = display.height()/2;
timeHour = (now.hour());
timeMin = (now.minute());
timeSec = (now.second());
secDegree = timeSec*6;
minDegree = (timeMin+(timeSec/60))*6;
hourDegree = (timeHour+(timeMin/60)+(timeSec/360))*30;
display.clearDisplay();
display.drawCircle(c_width, c_height , 1, SSD1306_WHITE);
for (int a =0;a <=360; a=a+6)
{
display.drawLine(c_width+(sin(a*0.0174533)*30), c_height+(cos(a*0.0174533)*30) , c_width+(sin(a*0.0174533)*30), c_height+(cos(a*0.0174533)*30), SSD1306_WHITE);
}
for (int a =0;a <=360; a=a+30)
{
display.drawLine(c_width+(sin(a*0.0174533)*30), c_height+(cos(a*0.0174533)*30) , c_width+(sin(a*0.0174533)*25), c_height+(cos(a*0.0174533)*25), SSD1306_WHITE);
}
display.drawLine(c_width, c_height , c_width+(sin(secDegree*0.0174533)*28), c_height-(cos(secDegree*0.0174533)*28), SSD1306_WHITE);
display.drawLine(c_width, c_height , c_width+(sin(minDegree*0.0174533)*20), c_height-(cos(minDegree*0.0174533)*20), SSD1306_WHITE);
display.drawLine(c_width, c_height , c_width+(sin(hourDegree*0.0174533)*12), c_height-(cos(hourDegree*0.0174533)*12), SSD1306_WHITE);
display.display();
}
}
void code()
{
var =! var;
}
ISR(TIMER1_COMPA_vect)
{
}