Panel Cookies
Arduino simple watch - CODE
Help me by sharing this post



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.


Simple watch code: (last update 20/01/2019)

Download Adafruit_GFX library:
Download Adafruit_SSD1306 library:
Download DS3231 library:
Download DS3231RTC library:



Arduino smartwatch PCB code





/*
 * 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();        
    }
    
    
  }
}








yt_link
insta_link
fb_link
twitter_link

Arduino watch - code



Affiliate Disclosure

ADVERTISERS



PCBWAY PCB service





Curso Arduino Online nivel Intermedio