Arduino and RTC Connection
Components Required
- Arduino UNO
- DS1307
- Max 7219
- 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);
}