Robojax

Lesson 105: Ultimate Arduino Clocks projects using DS1307

Lesson 105: Ultimate Arduino Clocks projects using DS1307

Please select other codes for this lecture from the links below.

  • Lesson 19: Introduction to LCD screen
  • Lesson 25: Introduction to HT16K33 Seven Segment Display
  • Purchase LCD Screen from Amazon USA
  • Purchase LCD Screen from Amazon Canada
  • Purchase LCD Screen from all other Amazon
  • Part 13: Clock and Timers

    This in this lesson we have 7 projects in one. We learn how use DS1307 Real-Time Clock (RTC) module to build a clock using Arduino.

    This is project 6 LCD Clock using DS1307 RTC module. We learn how to display a full calendar and clock on LCD1602 or LCD2004 LCD display. We use LCD screen with the I2C module wich allowes us to have only 4 wire.

    Projects

    
     /*
     * Lesson 105-1: Building Clock using DS1307 | Robojax Arduino Step By Step Course
     This code:  Project 6: LCD Clock using DS1307
    In this lesson we learn how to use DS1307 Real-time clock module to build Arduino clock. In this lesson we learn about 7 projects. 
    
    Project 1: Basic DS1307 Clock with Arduino
    Project 2: DS1307 Alarm with Buzzer and Relay
    Project 3: DS1307 Alarm with Relay and AC Bulb
    Project 4: LED Seven Segment Clock using DS1307
    Project 5: Unlimited Alarm with Relay
    Project 6: LCD Clock using DS1307 (this code)
    Project 7: LCD Clock with Alarm 
     * Watch Video instrution for this code:https://youtu.be/gz9xqvRroDY
     * 
     * This code is part of Arduino Step by Step Course which starts here:  https://youtu.be/-6qSrDUA5a8
     * 
     * for library of this code visit http://robojax.com/
     * 
    If you found this tutorial helpful, please support me so I can continue creating 
    content like this. Make a donation using PayPal by credit card https://bit.ly/donate-robojax 
    
    Written by Ahmad Shamshiri on Feb 07, 2021
    
     *  * This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.* 
     * This code has been download from Robojax.com
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 3 of the License, or
        (at your option) any later version.
    
        This program is distributed in the hope that it will be useful,
        but WITHOUT ANY WARRANTY; without even the implied warranty of
        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        GNU General Public License for more details.
    
        You should have received a copy of the GNU General Public License
        along with this program.  If not, see <https://www.gnu.org/licenses/>.
    	
      DS1307: RTCLib from Adafruit
       https://github.com/adafruit/RTClib/   	
      HT16k33 library
    //  AUTHOR: Rob Tillaart
    // VERSION: 0.1.0
    // PURPOSE: demo
    //     URL: http://www.adafruit.com/products/1002
    //     URL: https://github.com/RobTillaart/HT16K33
    
    */
    
    
    #include <Wire.h>
    #include "RTClib.h"
    
    
    RTC_DS1307 rtc;
    const bool FORMAT_12=true;//if 12 hours set to true, for 24 hours set to false
    
    char daysOfTheWeek[7][12] = {
            "Sunday", "Monday", "Tuesday", 
            "Wednesday", "Thursday", "Friday", "Saturday"};
    char monthName[12][12] = {
            "January", "February", "March", 
            "April", "May", "June",
            "July", "August", "September",
            "October", "November", "December"                
          };
            
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x3f, 16, 2);
    
    
    void setup () {
    
      while (!Serial); // for Leonardo/Micro/Zero
    
      Serial.begin(9600);
      if (! rtc.begin()) {
        Serial.println("Couldn't find RTC");
        while (1);
      }
    
      if (! rtc.isrunning()) {
        Serial.println("RTC is NOT running!");
        // following line sets the RTC to the date & time this sketch was compiled
        // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
        // This line sets the RTC with an explicit date & time, for example to set
        // January 21, 2014 at 3am you would call:
         //rtc.adjust(DateTime(2019, 3, 3, 20, 0, 0));
      }
      //rtc.adjust(DateTime(2019, 3, 3, 20, 0, 0));
       //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
       
      // initialize the LCD
      lcd.begin();
    
      // Turn on the blacklight and print a message.
      lcd.backlight();
      lcd.print("Robojax");   
      lcd.setCursor (0,1); // go to start of 2nd line  
       lcd.print("DS3231  Clock");
       delay(2000);
    }
    
    void loop () {
        DateTime robojax = rtc.now();
       lcd.clear();
    
    
    
    
        lcd.setCursor (0,0); // go to start of 2nd line
          if(robojax.hour() <10)
          lcd.print(0); 
         if(FORMAT_12)
        {
           lcd.print(robojax.twelveHour());//12 hours format      
        }else{
           lcd.print(robojax.hour());//24 hours format  
        }      
    
          lcd.print(":");
            if(robojax.minute() <10)
            lcd.print(0);       
          lcd.print(robojax.minute());
          lcd.print(":");
            if(robojax.second() <10)
            lcd.print(0); 
          lcd.print(robojax.second());
           if(FORMAT_12)
          {
            if(robojax.isPM())
            {
               lcd.print("PM");  
            }else{
                lcd.print("AM");        
            }
          }      
          lcd.print(" ");        
          lcd.print(daysOfTheWeek[robojax.dayOfTheWeek()]);  
              
       lcd.setCursor (0,1);  
          lcd.print(robojax.day());  
          lcd.print(" ");      
          lcd.print(monthName[robojax.month()-1]);  
          lcd.print(" ");                                                
          lcd.print(robojax.year());
    
      delay(300);
      
    }