#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "TimerOne.h"
#include "Time.h"
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Time currentTime;
Time alarmTime;
bool alarmActive = false;
void setup() {
Serial.begin(9600);
// initialize and clear display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
display.clearDisplay();
// display.setTextSize(1);
// display.setTextColor(WHITE);
currentTime.setTime(12,0,0);
alarmTime.setTime(12,0,0);
Timer1.initialize(1000000); // Interrupt every 1 second
Timer1.attachInterrupt(updateTime);
}
void loop() {
display.clearDisplay();
displayTime();
displayAlarm();
display.display();
delay(100);
}
void displayTime() {
// display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.print("TIME:");
display.setCursor(15, 20);
display.print(currentTime.hours < 10 ? "0" : "");
display.print(currentTime.hours);
display.print(":");
display.print(currentTime.minutes < 10 ? "0" : "");
display.print(currentTime.minutes);
display.print(":");
display.print(currentTime.seconds < 10 ? "0" : "");
display.print(currentTime.seconds);
// display.display();
}
void displayAlarm() {
// display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(0, 40);
display.print("ALARM:");
display.setCursor(40, 50);
display.print(alarmTime.hours < 10 ? "0" : "");
display.print(alarmTime.hours);
display.print(":");
display.print(alarmTime.minutes < 10 ? "0" : "");
display.print(alarmTime.minutes);
display.print(":");
display.print(alarmTime.seconds < 10 ? "0" : "");
display.print(alarmTime.seconds);
// display.display();
}
//ISR: Interrupt Service Routine:
void updateTime() {
currentTime.incrementSeconds();
//checkAlarm();
}