//include libraries
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
//Define OLED parameters
#define screen_width 128
#define screen_height 64
#define OLED_reset -1
#define screen_address 0x3c
//Declare objects
Adafruit_SSD1306 display(screen_width, screen_height, &Wire, OLED_reset);
//Global variables
int days = 0;
int hours = 0;
int minutes = 0;
int seconds = 0;
unsigned long timeNow = 0;
unsigned long timeLast = 0;
bool alarm_enabled = true;
int n_alarms = 2;
int alarm_hours[] = {0, 1};
int alarm_hours[] = {1, 10};
bool alarm_triggered = {false, false};
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
if(!display.begin(SSD1306_SWITCHCAPVCC, screen_address)) { // Address 0x3D for 128x64
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
//display.display();
//delay(2000);
display.clearDisplay();
print_line("Welcome to the ", 20, 20, 1);
print_line("MediBox", 45, 40, 1);
delay(2000);
display.clearDisplay();
}
void loop() {
update_time_with_check_alarm();
}
void print_line(String text, int column, int row, int txt_size){
display.setTextSize(txt_size);
display.setTextColor(WHITE);
display.setCursor(column, row);
// Display static text
display.println(text);
display.display();
}
void print_time_now(void){
print_line(String (days), 0, 0, 2);
print_line(":", 20, 0, 2);
print_line(String (hours), 30, 0, 2);
print_line(":", 50, 0, 2);
print_line(String (minutes), 60, 0, 2);
print_line(":", 80, 0, 2);
print_line(String (seconds), 90, 0, 2);
display.clearDisplay();
}
void update_time(void){
timeNow = millis()/1000;
seconds = timeNow - timeLast;
if(seconds >= 60 ){
minutes += 1;
timeLast = millis()/1000;
}
if(minutes == 60){
hours += 1;
minutes = 0;
}
if(hours == 24){
days += 1;
hours == 0;
}
}
void update_time_with_check_alarm(void){
update_time();
print_time_now();
if(alarm_enabled == true){
for (int i =0; i<n_alarms; i++){
if(alarm_triggered[i] == false && alarm_hours == hours && alarm_minutes == minutes){
ring_alarm();
}
}
}
}