This is the code used with my Arduino watch development board fot the simple watch example. You will also need the DS3231 adn the OLED screen libraries so dwonlaod those from below and install them before compiling the code. Download the code or copy it from below and uplaod it to the PCB.
/*
* See tutorial for PCB here: https://www.electronoobs.com/eng_arduino_tut65.php
* Schematic: https://www.electronoobs.com/eng_arduino_tut65_sch1.php
* Gerber files: https://www.electronoobs.com/eng_arduino_tut65_gerber1.php
* last update: 20-01-2019
* By: ELECTRONOOBS
*/
static const unsigned char PROGMEM LOGO_WATCHEN[] =
{/* 0X00,0X01,0X80,0X00,0X18,0X00, */
0XE0,0X78,0X1C,0X0F,0X07,0XFF,0XE0,0XFF,0X81,0XC0,0X39,0XC7,0XFF,0XBF,0XC0,0X00,
0XE0,0X78,0X1C,0X0F,0X07,0XFF,0XE0,0XFF,0XC1,0XC0,0X39,0XF7,0XFF,0XBF,0XE0,0X00,
0X60,0X78,0X1C,0X1F,0X07,0XFF,0XE1,0XF3,0XE1,0XC0,0X39,0XF7,0XFF,0XFF,0XE0,0X3C,
0X70,0X7C,0X18,0X1F,0X00,0X18,0X03,0X80,0XE1,0XC0,0X39,0XE7,0XFF,0XFF,0XE0,0X3F,
0X70,0X7C,0X18,0X1F,0X80,0X18,0X03,0X80,0XF1,0XC0,0X39,0XCF,0XFF,0XFF,0XF0,0X7F,
0X70,0XFC,0X38,0X1B,0X80,0X18,0X07,0X00,0X71,0XC0,0X39,0XC8,0X00,0X7F,0XF0,0X7F,
0X70,0XCC,0X38,0X39,0X80,0X18,0X07,0X00,0X01,0XC0,0X39,0XD8,0X00,0X7F,0XF8,0X7E,
0X30,0XCE,0X38,0X39,0XC0,0X18,0X07,0X00,0X01,0XC0,0X39,0XFC,0X00,0X7F,0XF8,0X7E,
0X30,0XCE,0X38,0X31,0XC0,0X18,0X07,0X00,0X01,0XC0,0X39,0XBF,0XFF,0X7F,0XF8,0X7E,
0X39,0XCE,0X30,0X71,0XC0,0X18,0X07,0X00,0X01,0XFF,0XF9,0XBF,0XFE,0X7E,0XFC,0X7E,
0X39,0XC6,0X70,0X70,0XE0,0X18,0X07,0X00,0X01,0XFF,0XF9,0XBF,0XFE,0X7E,0XFC,0X7E,
0X39,0XC6,0X70,0X70,0XE0,0X18,0X07,0X00,0X01,0XFF,0XF9,0XBF,0XFE,0X7E,0X7C,0X7E,
0X19,0X87,0X70,0XFF,0XE0,0X18,0X07,0X00,0X01,0XC0,0X39,0XBF,0XDA,0X7C,0X32,0XFE,
0X19,0X87,0X60,0XFF,0XE0,0X18,0X07,0X00,0X01,0XC0,0X39,0X78,0X00,0X78,0X10,0XFE,
0X19,0X87,0X60,0XFF,0XF0,0X18,0X07,0X00,0X61,0XC0,0X3B,0X78,0X00,0XF6,0X01,0XFE,
0X1F,0X83,0XE1,0XC0,0X70,0X18,0X07,0X00,0X71,0XC0,0X38,0X78,0X00,0XCC,0X39,0XFC,
0X1F,0X03,0XE1,0XC0,0X70,0X18,0X03,0X80,0X71,0XC0,0X39,0X7F,0XFF,0XEC,0X1F,0XFC,
0X0F,0X03,0XE1,0XC0,0X38,0X18,0X03,0X80,0XF1,0XC0,0X39,0X3F,0XFF,0XFC,0X1F,0XFC,
0X0F,0X03,0XC1,0XC0,0X38,0X18,0X01,0XC1,0XE1,0XC0,0X39,0XBF,0XFF,0XFC,0X0F,0XFC,
0X0F,0X03,0XC3,0X80,0X38,0X18,0X01,0XFF,0XC1,0XC0,0X39,0X3F,0XFF,0XFC,0X0F,0XFC,
0X0F,0X01,0XC3,0X80,0X3C,0X18,0X00,0XFF,0XC1,0XC0,0X39,0X7F,0XFF,0XFC,0X0F,0XFC,
0X0E,0X01,0XC3,0X80,0X1C,0X18,0X00,0X7F,0X01,0XC0,0X38,0X00,0X00,0X00,0X07,0XFC,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X07,0XF8,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,};
static const unsigned char PROGMEM Clock[] =
{
B00001111, B11100000,
B00110000, B00011000,
B01000000, B00000100,
B01000001, B11100100,
B01000000, B10000100,
B00100000, B01001000,
B00011111, B11110000,
B00011000, B00110000
};
//#include <avr/wdt.h> // library for default watchdog functions
#include <avr/interrupt.h> // library for interrupts handling
#include <avr/sleep.h> // library for sleep
#include <avr/power.h> // library for power control
#include <DS3231.h> //Downlaod it here: https://www.electronoobs.com/eng_arduino_ds3231.php
#include <DS3232RTC.h> //Downlaod it here: https://www.electronoobs.com/eng_arduino_ds3231_RTC.php#include <Adafruit_GFX.h> //Downlaod it here: https://www.electronoobs.com/eng_arduino_Adafruit_GFX.php
#include <Adafruit_SSD1306.h> //Download it here: https://www.electronoobs.com/eng_arduino_Adafruit_SSD1306.php
DS3231 rtc(SDA, SCL);
#define OLED_RESET 9
Adafruit_SSD1306 display(OLED_RESET);
#define BATTERY A0
#define TOP_BUTTON 2
#define MID_BUTTON 4
#define BOT_BUTTON 3
#define ALARM_IN 7
#define BT_MOS 8
#define BAT_LED 6
#define BUZZER 5
bool BT_STATE = false;
bool wake_up = true;
bool beep_once = true;
bool sound_on = true;
bool mid_button_pressed = false;
bool top_button_pressed = false;
bool bot_button_pressed = false;
bool first_time_setting_time = false;
bool ALARM_DETECTED = false;
bool ALARM_STOPPED = false;
bool ALARM_ACTIVE = false;
bool alarm_is_set = false;
bool ALARM_DETECTED_BUT_NOT_ACTIVE = false;
bool stopwatch_enabeled = true;
int button_press_counter = 0;
int menu_level = 0;
int select_menu = 0;
int set_time_menu = 0;
unsigned long display_on_time = 10000;
int set_alarm_level = 1;
int alarm_hour = 0;
int alarm_minute = 0;
int stopwatch_hour = 0;
int stopwatch_minute = 0;
int stopwatch_second = 0;
unsigned long prev_wake_up_millis = 0;
unsigned long prev_stopwatch_millis = 0;
void setup() {
pinMode(BATTERY,INPUT);
pinMode(TOP_BUTTON,INPUT);
pinMode(MID_BUTTON,INPUT);
pinMode(BOT_BUTTON,INPUT);
pinMode(ALARM_IN,INPUT_PULLUP);
pinMode(BT_MOS,OUTPUT);
pinMode(BAT_LED,OUTPUT);
pinMode(BUZZER,OUTPUT);
digitalWrite(BT_MOS, BT_STATE);
digitalWrite(BAT_LED, LOW);
digitalWrite(BUZZER, LOW);
PCICR |= B00000100; //pcint 16 to 23 (pin D4 is PCINT20/ pin D7 is PCINT23)
PCMSK2 |= B10010000; //Set pin D4 (middle button) and D7 (alarm) to interrupt
analogReference(INTERNAL);
rtc.begin();
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
RTC.setAlarm(ALM1_MATCH_HOURS, 27, 21, 0);
RTC.squareWave(SQWAVE_NONE);
RTC.alarmInterrupt(ALARM_1, true);
RTC.alarmInterrupt(ALARM_2, false);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
delay(100);
display.clearDisplay();
display.display();
delay(200);
display.drawBitmap(0, 20, LOGO_WATCHEN, 128, 24, 1);
display.display();
delay(1500);
}
void loop() {
unsigned long wake_up_millis = millis();
if(sound_on && beep_once)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
beep_once=false;
}
if ((wake_up_millis - prev_wake_up_millis >= display_on_time) && menu_level !=5)
{
menu_level = 0;
wake_up = false;
ALARM_ACTIVE = false;
ALARM_STOPPED = false;
ALARM_DETECTED = false;
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
display.clearDisplay();
display.display();
//We activate LOW power mode
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
cli();
sleep_enable();
sleep_bod_disable();
sei();
sleep_cpu();
}
if ((wake_up_millis - prev_wake_up_millis >= 5000) && ALARM_ACTIVE == false && menu_level !=5)
{
if(menu_level > 0)
{
menu_level = 0;
prev_wake_up_millis = millis();
}
set_time_menu = 0;
}
if(wake_up)
{
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 0//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 0)
{
///////////////////////////////MID BUTTON////////////////////////////////
if(digitalRead(MID_BUTTON))
{
if(button_press_counter > 5)
{
mid_button_pressed = true;
prev_wake_up_millis = millis();
menu_level = 1;
select_menu = 0;
button_press_counter = 0;
}
button_press_counter = button_press_counter + 1;
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
///////////////////////////END OF MID BUTTON/////////////////////////////
///////////////////////////////TOP BUTTON////////////////////////////////
if(digitalRead(TOP_BUTTON))
{
if(button_press_counter > 12)
{
top_button_pressed = true;
prev_wake_up_millis = millis();
alarm_is_set = !alarm_is_set;
button_press_counter = 0;
analogWrite(BUZZER,200);
delay(60);
analogWrite(BUZZER,LOW);
delay(60);
analogWrite(BUZZER,200);
delay(60);
analogWrite(BUZZER,LOW);
delay(60);
analogWrite(BUZZER,200);
delay(60);
analogWrite(BUZZER,LOW);
}
button_press_counter = button_press_counter + 1;
}
if(!digitalRead(TOP_BUTTON))
{
top_button_pressed = false;
}
///////////////////////////END OF MID BUTTON/////////////////////////////
/////////////////////////////PRINT TIME/////////////////////////////////
int battery_level = map (analogRead(BATTERY),0,1024,10,100);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK,WHITE);
display.setCursor(0,0);
display.print(rtc.getDOWStr());
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(105,0);
display.print(battery_level);
display.print("%");
display.setTextSize(3);
display.setCursor(18,20);
String the_time = rtc.getTimeStr();
display.print(the_time[0]);
display.print(the_time[1]);
display.print(the_time[2]);
display.print(the_time[3]);
display.print(the_time[4]);
//display.print(the_time[5]);
display.setTextSize(1);
display.setCursor(110,34);
display.print(the_time[6]);
display.print(the_time[7]);
display.setCursor(35,44);
display.print(rtc.getDateStr());
if(alarm_is_set)
{
display.drawBitmap(113, 54, Clock, 16, 8, 1);
display.display();
}
display.display();
//delay(100);
////////////////////////////END PRINT TIME///////////////////////////////
}//end of menu = 0
/////////////////////////////////////////////////////////////////////////
//////////////////////////////END OF MENU 0//////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 1//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 1)
{
//////////////////////////MID BUTTON ON MENU 1///////////////////////////
if(digitalRead(MID_BUTTON) && !mid_button_pressed)
{
mid_button_pressed = true;
prev_wake_up_millis = millis();
if(select_menu == 5)
{
menu_level = 0;
}
if(select_menu == 4)
{
menu_level = 5;
stopwatch_hour = 0;
stopwatch_minute = 0;
stopwatch_second = 0;
}
if(select_menu == 3)
{
menu_level = 4;
}
if(select_menu == 2)
{
sound_on = !sound_on;
}
if(select_menu == 1)
{
menu_level = 3;
set_alarm_level = 1;
}
if(select_menu == 0)
{
menu_level = 2;
first_time_setting_time = true;
}
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
/////////////////////END OF MID BUTTON ON MENU 1/////////////////////////
//////////////////////////TOP BUTTON ON MENU 1///////////////////////////
if(digitalRead(TOP_BUTTON) && !top_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
top_button_pressed = true;
prev_wake_up_millis = millis();
select_menu = select_menu - 1;
}
if(!digitalRead(TOP_BUTTON))
{
top_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 1/////////////////////////
//////////////////////////TOP BUTTON ON MENU 1///////////////////////////
if(digitalRead(BOT_BUTTON) && !bot_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
bot_button_pressed = true;
prev_wake_up_millis = millis();
select_menu = select_menu + 1;
}
if(!digitalRead(BOT_BUTTON))
{
bot_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 1/////////////////////////
if(select_menu < 0)
{
select_menu = 5;
}
if(select_menu > 5)
{
select_menu = 0;
}
display.clearDisplay();
display.setTextSize(2);
if(select_menu == 0)
{
display.setTextColor(BLACK,WHITE);
display.setCursor(0,0);
display.print("SET TIME");
display.setTextColor(WHITE);
display.setCursor(0,17);
display.print("SET ALARM");
if(sound_on)
{
display.setCursor(0,34);
display.print("SOUND OFF");
}
else
{
display.setCursor(0,34);
display.print("SOUND ON");
}
}//end of select menu == 0
if(select_menu == 1)
{
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("SET TIME");
display.setTextColor(BLACK,WHITE);
display.setCursor(0,17);
display.print("SET ALARM");
display.setTextColor(WHITE);
if(sound_on)
{
display.setCursor(0,34);
display.print("SOUND OFF");
}
else
{
display.setCursor(0,34);
display.print("SOUND ON");
}
}//end of select menu == 1
if(select_menu == 2)
{
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("SET TIME");
display.setCursor(0,17);
display.print("SET ALARM");
display.setTextColor(BLACK,WHITE);
if(sound_on)
{
display.setCursor(0,34);
display.print("SOUND OFF");
}
else
{
display.setCursor(0,34);
display.print("SOUND ON");
}
}//end of select menu == 2
if(select_menu == 3)
{
display.setTextColor(BLACK,WHITE);
display.setCursor(0,0);
display.print("SHOW LOGO");
display.setTextColor(WHITE);
display.setCursor(0,17);
display.print("STOPWATCH");
display.setCursor(0,34);
display.print("BACK");
}//end of select menu == 3
if(select_menu == 4)
{
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("SHOW LOGO");
display.setTextColor(BLACK,WHITE);
display.setCursor(0,17);
display.print("STOPWATCH");
display.setTextColor(WHITE);
display.setCursor(0,34);
display.print("BACK");
}//end of select menu == 4
if(select_menu == 5)
{
display.setTextColor(WHITE);
display.setCursor(0,0);
display.print("SHOW LOGO");
display.setCursor(0,17);
display.print("STOPWATCH");
display.setTextColor(WHITE);
display.setCursor(0,34);
display.setTextColor(BLACK,WHITE);
display.print("BACK");
}//end of select menu == 5
display.display();
}//end of menu = 1
/////////////////////////////////////////////////////////////////////////
//////////////////////////////END OF MENU 1//////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 2//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 2)
{
String the_day = rtc.getDOWStr();
String the_date = rtc.getDateStr();
String the_time = rtc.getTimeStr();
int set_hour = (10*(int(the_time[0]) - 48)) + (int(the_time[1]) - 48);
int set_minute = (10*(int(the_time[3]) - 48)) + (int(the_time[4]) - 48);
int set_second = (10*(int(the_time[6]) - 48)) + (int(the_time[7]) - 48);
int set_day = (10*(int(the_date[0]) - 48)) + (int(the_date[1]) - 48);
int set_month = (10*(int(the_date[3]) - 48)) + (int(the_date[4]) - 48);
int set_year_1 = int(the_date[6]) - 48;
int set_year_2 = int(the_date[7]) - 48;
int set_year_3 = int(the_date[8]) - 48;
int set_year_4 = int(the_date[9]) - 48;
String set_week_day = "";
int day_number = 1;
if(the_day == "Sunday")
{
day_number = 7;
}
if(the_day == "Mondsy")
{
day_number = 1;
}
if(the_day == "Tuesday")
{
day_number = 2;
}
if(the_day == "Wednesday")
{
day_number = 3;
}
if(the_day == "Thursday")
{
day_number = 4;
}
if(the_day == "Friday")
{
day_number = 5;
}
if(the_day == "Saturday")
{
day_number = 6;
}
if(first_time_setting_time)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(BLACK,WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.setTextColor(WHITE);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(18,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.display();
first_time_setting_time = false;
}
//////////////////////////MID BUTTON ON MENU 2///////////////////////////
if(digitalRead(MID_BUTTON) && !mid_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
mid_button_pressed = true;
prev_wake_up_millis = millis();
set_time_menu = set_time_menu + 1;
if(set_time_menu > 9)
{
display.clearDisplay();
display.setTextSize(3);
display.setCursor(22,18);
display.setTextColor(WHITE);
display.print("SAVED");
display.display();
delay(1000);
set_time_menu = 0;
menu_level = 0;
}
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 2/////////////////////////
//////////////////////////TOP BUTTON ON MENU 2///////////////////////////
if(digitalRead(TOP_BUTTON) && !top_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
top_button_pressed = true;
prev_wake_up_millis = millis();
if(set_time_menu == 0)
{
set_hour = set_hour + 1;
if(set_hour > 23)
{
set_hour = 0;
}
}
if(set_time_menu == 1)
{
set_minute = set_minute + 1;
if(set_minute > 59)
{
set_minute = 0;
}
}
if(set_time_menu == 2)
{
set_second = set_second + 1;
if(set_second > 59)
{
set_second = 0;
}
}
if(set_time_menu == 3)
{
set_day = set_day + 1;
if(set_day > 31)
{
set_day = 1;
}
}
if(set_time_menu == 4)
{
set_month = set_month + 1;
if(set_month > 12)
{
set_month = 1;
}
}
if(set_time_menu == 5)
{
set_year_1 = set_year_1 + 1;
if(set_year_1 > 2)
{
set_year_1 = 1;
}
}
if(set_time_menu == 6)
{
set_year_2 = set_year_2 + 1;
if(set_year_2 > 9)
{
set_year_2 = 0;
}
}
if(set_time_menu == 7)
{
set_year_3 = set_year_3 + 1;
if(set_year_3 > 9)
{
set_year_3 = 0;
}
}
if(set_time_menu == 8)
{
set_year_4 = set_year_4 + 1;
if(set_year_4 > 9)
{
set_year_4 = 0;
}
}
////////////////////
if(set_time_menu == 9)
{
day_number = day_number + 1;
if(day_number > 7)
{
day_number = 1;
}
if(day_number == 7)
{
set_week_day = "SUNDAY";
}
if(day_number == 1)
{
set_week_day = "MONDAY";
}
if(day_number == 2)
{
set_week_day = "TUESDAY";
}
if(day_number == 3)
{
set_week_day = "WEDNESDAY";
}
if(day_number == 4)
{
set_week_day = "THURSDAY";
}
if(day_number == 5)
{
set_week_day = "FRIDAY";
}
if(day_number == 6)
{
set_week_day = "SATURDAY";
}
}
}
if(!digitalRead(TOP_BUTTON))
{
top_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 2/////////////////////////
//////////////////////////TOP BUTTON ON MENU 2///////////////////////////
if(digitalRead(BOT_BUTTON) && !bot_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
bot_button_pressed = true;
prev_wake_up_millis = millis();
if(set_time_menu == 0)
{
set_hour = set_hour - 1;
if(set_hour < 0)
{
set_hour = 23;
}
}
if(set_time_menu == 1)
{
set_minute = set_minute - 1;
if(set_minute < 0)
{
set_minute = 59;
}
}
if(set_time_menu == 2)
{
set_second = set_second - 1;
if(set_second < 0)
{
set_second = 59;
}
}
if(set_time_menu == 3)
{
set_day = set_day - 1;
if(set_day < 1)
{
set_day = 31;
}
}
if(set_time_menu == 4)
{
set_month = set_month - 1;
if(set_month < 1)
{
set_month = 12;
}
}
if(set_time_menu == 5)
{
set_year_1 = set_year_1 - 1;
if(set_year_1 < 1)
{
set_year_1 = 2;
}
}
if(set_time_menu == 6)
{
set_year_2 = set_year_2 - 1;
if(set_year_2 < 0)
{
set_year_2 = 9;
}
}
if(set_time_menu == 7)
{
set_year_3 = set_year_3 - 1;
if(set_year_3 < 0)
{
set_year_3 = 9;
}
}
if(set_time_menu == 8)
{
set_year_4 = set_year_4 - 1;
if(set_year_4 < 0)
{
set_year_4 = 9;
}
}
////////////////////
if(set_time_menu == 9)
{
day_number = day_number - 1;
if(day_number < 1)
{
day_number = 7;
}
if(day_number == 7)
{
set_week_day = "SUNDAY";
}
if(day_number == 1)
{
set_week_day = "MONDAY";
}
if(day_number == 2)
{
set_week_day = "TUESDAY";
}
if(day_number == 3)
{
set_week_day = "WEDNESDAY";
}
if(day_number == 4)
{
set_week_day = "THURSDAY";
}
if(day_number == 5)
{
set_week_day = "FRIDAY";
}
if(day_number == 6)
{
set_week_day = "SATURDAY";
}
}
}
if(!digitalRead(BOT_BUTTON))
{
bot_button_pressed = false;
}
/////////////////////END OF BOT BUTTON ON MENU 2/////////////////////////
int set_year = 1000*set_year_1 + 100*set_year_2 + 10*set_year_3 + set_year_4;
rtc.setDate(set_day, set_month, set_year); // Set the date to January 1st, 2014
rtc.setTime(set_hour, set_minute, set_second); // Set the time to 12:00:00 (24hr format)
rtc.setDOW(day_number); // Set Day-of-Week to SUNDAY
if(set_time_menu == 0)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(BLACK,WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.setTextColor(WHITE);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 1)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.setTextColor(BLACK,WHITE);
display.print(set_minute);
display.setTextColor(WHITE);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 2)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.setTextColor(BLACK,WHITE);
display.print(set_second);
display.setCursor(5,17);
display.setTextColor(WHITE);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 3)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.setTextColor(BLACK,WHITE);
display.print(set_day);
display.setTextColor(WHITE);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 4)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.setTextColor(BLACK,WHITE);
display.print(set_month);
display.setTextColor(WHITE);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 5)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.setTextColor(BLACK,WHITE);
display.print(set_year_1);
display.setTextColor(WHITE);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 6)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.setTextColor(BLACK,WHITE);
display.print(set_year_2);
display.setTextColor(WHITE);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 7)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.setTextColor(BLACK,WHITE);
display.print(set_year_3);
display.setTextColor(WHITE);
display.print(set_year_4);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 8)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.setTextColor(BLACK,WHITE);
display.print(set_year_4);
display.setTextColor(WHITE);
display.setCursor(18,34);
display.print(the_day);
display.display();
}
if(set_time_menu == 9)
{
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(18,0);
display.print(set_hour);
display.print(":");
display.print(set_minute);
display.print(":");
display.print(set_second);
display.setCursor(5,17);
display.print(set_day);
display.print("/");
display.print(set_month);
display.print("/");
display.print(set_year_1);
display.print(set_year_2);
display.print(set_year_3);
display.print(set_year_4);
display.setCursor(18,34);
display.setTextColor(BLACK,WHITE);
display.print(the_day);
display.display();
}
}//end of menu = 2
/////////////////////////////////////////////////////////////////////////
//////////////////////////////END OF MENU 2//////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 3//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 3)
{
if(set_alarm_level == 1)
{
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(118,0);
display.print("+");
display.setCursor(110,25);
display.print("Set");
display.setCursor(118,52);
display.print("-");
display.setTextColor(BLACK,WHITE);
display.setTextSize(3);
display.setCursor(5,19);
display.print(alarm_hour);
display.setTextColor(WHITE);
display.print(":");
display.print(alarm_minute);
display.display();
delay(100);
}
if(set_alarm_level == 2)
{
display.clearDisplay();
display.clearDisplay();
display.setTextColor(WHITE);
display.setTextSize(1);
display.setCursor(118,0);
display.print("+");
display.setCursor(110,25);
display.print("Set");
display.setCursor(118,52);
display.print("-");
display.setTextColor(WHITE);
display.setTextSize(3);
display.setCursor(5,19);
display.print(alarm_hour);
display.print(":");
display.setTextColor(BLACK,WHITE);
display.print(alarm_minute);
display.display();
}
//////////////////////////TOP BUTTON ON MENU 3///////////////////////////
if(digitalRead(TOP_BUTTON) && !top_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
top_button_pressed = true;
prev_wake_up_millis = millis();
if(set_alarm_level == 1)
{
alarm_hour = alarm_hour + 1;
if(alarm_hour > 23)
{
alarm_hour = 0;
}
}
if(set_alarm_level == 2)
{
alarm_minute = alarm_minute + 1;
if(alarm_minute > 59)
{
alarm_minute = 0;
}
}
}
if(!digitalRead(TOP_BUTTON))
{
top_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 3/////////////////////////
//////////////////////////MID BUTTON ON MENU 3///////////////////////////
if(digitalRead(MID_BUTTON) && !mid_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
mid_button_pressed = true;
prev_wake_up_millis = millis();
set_alarm_level = set_alarm_level + 1;
if(set_alarm_level == 3)
{
RTC.setAlarm(ALM1_MATCH_HOURS, alarm_minute, alarm_hour, 0);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(12,20);
display.print("ALARM SET");
display.display();
delay(1000);
menu_level = 0;
set_alarm_level = 1;
alarm_is_set = true;
}
delay(100);
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
/////////////////////END OF TOP BUTTON ON MENU 3/////////////////////////
//////////////////////////BOT BUTTON ON MENU 3///////////////////////////
if(digitalRead(BOT_BUTTON) && !bot_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
bot_button_pressed = true;
prev_wake_up_millis = millis();
if(set_alarm_level == 1)
{
alarm_hour = alarm_hour - 1;
if(alarm_hour < 0)
{
alarm_hour = 23;
}
}
if(set_alarm_level == 2)
{
alarm_minute = alarm_minute - 1;
if(alarm_minute < 0)
{
alarm_minute = 59;
}
}
}
if(!digitalRead(BOT_BUTTON))
{
bot_button_pressed = false;
}
/////////////////////END OF BOT BUTTON ON MENU 3/////////////////////////
}
/////////////////////////////////////////////////////////////////////////
/////////////////////////////END OF MENU 3///////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 4//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 4)
{
display.clearDisplay();
display.drawBitmap(0, 20, LOGO_WATCHEN, 128, 24, 1);
display.display();
if(digitalRead(MID_BUTTON) && !mid_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
mid_button_pressed = true;
prev_wake_up_millis = millis();
menu_level = 0;
select_menu = 0;
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
}
/////////////////////////////////////////////////////////////////////////
//////////////////////////////END OF MENU 4//////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////MENU 5//////////////////////////////////
/////////////////////////////////////////////////////////////////////////
if(menu_level == 5)
{
//////////////////////////TOP BUTTON ON MENU 5///////////////////////////
if(digitalRead(TOP_BUTTON) && !top_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
menu_level = 0;
stopwatch_enabeled = false;
top_button_pressed = true;
prev_wake_up_millis = millis();
}
if(!digitalRead(TOP_BUTTON))
{
top_button_pressed = false;
}
/////////////////////END OF BOT BUTTON ON MENU 5/////////////////////////
//////////////////////////MID BUTTON ON MENU 5///////////////////////////
if(digitalRead(MID_BUTTON) && !mid_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
stopwatch_enabeled = !stopwatch_enabeled;
mid_button_pressed = true;
prev_wake_up_millis = millis();
}
if(!digitalRead(MID_BUTTON))
{
mid_button_pressed = false;
}
/////////////////////END OF BOT BUTTON ON MENU 5/////////////////////////
//////////////////////////BOT BUTTON ON MENU 5///////////////////////////
if(digitalRead(BOT_BUTTON) && !bot_button_pressed)
{
if(sound_on)
{
analogWrite(BUZZER,200);
delay(70);
analogWrite(BUZZER,LOW);
}
stopwatch_hour = 0;
stopwatch_minute = 0;
stopwatch_second = 0;
bot_button_pressed = true;
prev_wake_up_millis = millis();
}
if(!digitalRead(BOT_BUTTON))
{
bot_button_pressed = false;
}
/////////////////////END OF BOT BUTTON ON MENU 5/////////////////////////
unsigned long stopwatch_millis = millis();
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(90,0);
display.print("Exit");
display.setCursor(90,25);
if(stopwatch_enabeled)
{
display.print("Pause");
}
else
{
display.print("Start");
}
display.setCursor(90,52);
display.print("Reset");
display.setTextSize(2);
display.setCursor(2,20);
display.print(stopwatch_hour);
display.print(":");
display.print(stopwatch_minute);
display.print(":");
display.print(stopwatch_second);
if(stopwatch_enabeled)
{
if ((stopwatch_millis - prev_stopwatch_millis >= 1000))
{
stopwatch_second = stopwatch_second + 1;
prev_stopwatch_millis = millis();
}
if(stopwatch_second > 59)
{
stopwatch_second = 0;
stopwatch_minute = stopwatch_minute + 1;
}
if(stopwatch_minute > 59)
{
stopwatch_minute = 0;
stopwatch_hour = stopwatch_hour + 1;
}
if(stopwatch_hour > 99)
{
stopwatch_hour = 0;
}
}//end of stopwatch_enabeled
display.display();
}
/////////////////////////////////////////////////////////////////////////
//////////////////////////////END OF MENU 5//////////////////////////////
/////////////////////////////////////////////////////////////////////////
}//end of wake up
if(ALARM_DETECTED && !ALARM_STOPPED)
{
ALARM_ACTIVE = true;
}
if(ALARM_DETECTED && ALARM_STOPPED)
{
ALARM_ACTIVE = false;
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
}
if(ALARM_DETECTED_BUT_NOT_ACTIVE)
{
ALARM_DETECTED_BUT_NOT_ACTIVE = false;
RTC.alarm(ALARM_1);
RTC.alarm(ALARM_2);
}
if(ALARM_ACTIVE)
{
analogWrite(BUZZER,200);
delay(200);
analogWrite(BUZZER,LOW);
display.clearDisplay();
display.setTextSize(3);
display.setTextColor(WHITE);
display.setCursor(4,20);
display.print(" ALARM");
display.display();
delay(200);
}
}//end of void loop
ISR(PCINT2_vect)
{
if(PIND & B00010000)
{
sleep_disable();
power_adc_enable();
wake_up = true;
prev_wake_up_millis = millis();
beep_once = true;
ALARM_STOPPED = true;
display_on_time = 10000;
}//end of push button
if(!(PIND & B10000000))
{
if(alarm_is_set)
{
ALARM_DETECTED = true;
sleep_disable();
wake_up = true;
if(!ALARM_ACTIVE)
{
ALARM_STOPPED = false;
display_on_time = 60000;
prev_wake_up_millis = millis();
}
}
else
{
sleep_disable();
ALARM_DETECTED_BUT_NOT_ACTIVE = true;
prev_wake_up_millis = millis();
}
}
}