#include "RTClib.h"
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EEPROM.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET 4 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
RTC_DS1307 rtc; //create an instant of RTC
#define button1 2
#define button2 3
void setup () {
Serial.begin(115200);
pinMode(button1, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(button1), timeMode, LOW);
pinMode(button2, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(button2), alarm, LOW);
//check rtc connection
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
}
rtc.adjust(DateTime(F(__DATE__), 1, 1, 12, 59, 55));
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3C for 128x64
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(2);
}
void timeMode(){
static unsigned long previousTime = 0;
unsigned long currentTime = millis();
if (currentTime - previousTime > 50){
if (EEPROM.read(0) == 0){
EEPROM.write(0,1);
} else{
EEPROM.write(0,0);
}
previousTime = currentTime;
}
}
void alarm(){
static unsigned long previousTime1 = 0;
unsigned long currentTime1 = millis();
if (currentTime1 - previousTime1 > 50){
int hour = EEPROM.read(1);
if (hour < 23){
hour += 1;
EEPROM.write(1,hour);
} else{
EEPROM.write(1,0);
}
previousTime1 = currentTime1;
}
}
void loop () {
if (EEPROM.read(0) == 0){
twelveHour();
} else{
twentyFourHour();
}
}
void twelveHour(){
DateTime now = rtc.now();
display.clearDisplay();
display.setCursor(25, 25);
int alarmHour = EEPROM.read(1);
if (alarmHour > 12){
alarmHour -= 12;
display.setCursor(100, 25);
display.print("PM");
display.setCursor(25, 25);
if (alarmHour < 10){
display.print('0');
}
}
display.print(alarmHour);
display.print(':');
display.print('0');
display.print('0');
if (now.hour() == EEPROM.read(1) && now.minute() == 0){
display.setCursor(10, 48);
display.write("Buzz Buzz");
}
display.setCursor(15, 0);
int hour = now.hour();
if (hour > 12)
hour -= 12;
if (hour < 10)
display.print('0');
display.print(hour);
display.print(':');
if (now.minute() < 10)
display.print('0');
display.print(now.minute());
display.print(':');
if (now.second() < 10)
display.print('0');
display.println(now.second());
display.display();
}
void twentyFourHour(){
DateTime now = rtc.now();
display.clearDisplay();
display.setCursor(25, 25);
display.print(EEPROM.read(1));
display.print(':');
display.print('0');
display.print('0');
if (now.hour() == EEPROM.read(1) && now.minute() == 0){
display.setCursor(10, 48);
display.write("Buzz Buzz");
}
display.setCursor(15, 0);
if (now.hour() < 10)
display.print('0');
display.print(now.hour());
display.print(':');
if (now.minute() < 10)
display.print('0');
display.print(now.minute());
display.print(':');
if (now.second() < 10)
display.print('0');
display.println(now.second());
display.display();
}