Skip to main content

Digital Clock

  
Arduino and RTC Connection


Components Required
                     
  1. Arduino UNO
  2. DS1307
  3. Max 7219
  4. 7 Segment Display

The Program for Digital Clock

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>
#include "LedControl.h"
LedControl mydisplay = LedControl(12, 11, 10, 2);


void setup() {
  Serial.begin(9600);
  while (!Serial) ; // wait for serial
  delay(200);
  Serial.println("DS1307RTC Read Test");
  Serial.println("-------------------");
   mydisplay.shutdown(0, false);  // turns on display
  mydisplay.setIntensity(0, 15); // 15 = brightest
  mydisplay.shutdown(1, false);  // turns on display
  mydisplay.setIntensity(1, 15); // 15 = brightest
  Serial.println("\n\nString  substring():");
  Serial.println();

}

void loop()
{
 String stringOne = "tm.Hour";
  Serial.println(stringOne);
  tmElements_t tm;

  if (RTC.read(tm)) {
    Serial.print("Ok, time=");
    if (tm.Hour > 12) {
    tm.Hour -= 12;
  }
 String strHr = String(tm.Hour);
String strHr0 = strHr.substring(0,0);
String strHr1 = strHr.substring(0,1);
int inHr0 = strHr0.toInt();
int inHr1 = strHr1.toInt();

    print2digits(tm.Hour);
  mydisplay.setDigit(1, 0,inHr0, false);
    mydisplay.setDigit(1, 1,inHr1, false);
    Serial.write(':');

    print2digits(tm.Minute);
  String strMin = String(tm.Minute);
String strMin0 = strMin.substring(1,2);
String strMin1 = strMin.substring(0,1);
    Serial.print("--"+strMin0);
int inMin0 = strMin0.toInt();
int inMin1 = strMin1.toInt();

   Serial.write(':');
    mydisplay.setDigit(1, 2,inMin0, false);
      mydisplay.setDigit(1, 3,inMin1, false);
    print2digits(tm.Second);
    String strSec = String(tm.Second);
String strSec0 = strSec.substring(0,0);
String strSec1 = strSec.substring(0,1);
int inSec0 = strSec0.toInt();
int inSec1 = strSec1.toInt();
mydisplay.setDigit(1, 4,inSec0, false);
     mydisplay.setDigit(1, 5,inSec1, false);
   
    Serial.print(", Date (D/M/Y) = ");
     print2digits(tm.Day);
     String strDate = String(tm.Day);
String strDate0 = strDate.substring(0,1);
String strDate1 = strDate.substring(1,2);
int inDate0 = strDate0.toInt();
int inDate1 = strDate1.toInt();

       Serial.write('/');
       mydisplay.setDigit(0, 0,inDate0, false);
     mydisplay.setDigit(0, 1,inDate1, false);
    
       print2digits(tm.Month);
     String strMon = String(tm.Month);
String strMon0 = strMon.substring(0,0);
String strMon1 = strMon.substring(0,1);
int inMon0 = strMon0.toInt();
int inMon1 = strMon1.toInt();
    Serial.write('/');
     mydisplay.setDigit(0, 2,inMon0, false);
     mydisplay.setDigit(0, 3,inMon1, false);
    Serial.print(tmYearToCalendar(tm.Year));
    String strYr = String(tmYearToCalendar(tm.Year));
    //strYr = strYr.trim();
String strYr0 = strYr.substring(0,1);
    Serial.print("--"+strYr0);
String strYr1 = strYr.substring(1,2);
    Serial.print("--"+strYr1);
String strYr2 = strYr.substring(2,3);
    Serial.print("--"+strYr2);
String strYr3 = strYr.substring(3,4);
    Serial.print("--"+strYr3);
int inYr0 = strYr0.toInt();
int inYr1 = strYr1.toInt();
int inYr2 = strYr2.toInt();
int inYr3 = strYr3.toInt();

mydisplay.setDigit(0, 4,inYr0, false);
     mydisplay.setDigit(0, 5,inYr1, false);
     mydisplay.setDigit(0, 6,inYr2, false);
     mydisplay.setDigit(0, 7,inYr3, false);
     //print2digits(tm.WeekDay);
   // Serial.print(tm.WeekDay);
     //Serial.println(tm.Weekday="1=Sunday,2=Monday,3=Tuesday,4=Wednesday,5=Thursday,6=Friday,7=Saturday");
    
    
    
    Serial.println();
  } else {
    if (RTC.chipPresent()) {
      Serial.println("The DS1307 is stopped.  Please run the SetTime");
      Serial.println("example to initialize the time and begin running.");
      Serial.println();
    } else {
      Serial.println("DS1307 read error!  Please check the circuitry.");
      Serial.println();
    }
    delay(9000);
  }
  delay(1000);
}

void print2digits(int number) {
  if (number >= 0 && number < 10) {
    Serial.write('0');
  }
  Serial.print(number);
}