Introduction: Clock ,RTC DS1307 SET AND SHOW THE TIME ON YOUR LCD.

Based on my first Instructable.
Based on WWC SKETCH

Add Rtc(realtimeclock) to your Instructable .

Items
1 Arduino
1 Usb conector wire
1 RTC DS1307
1 Wires
1 Device to upload scetch.
1 time / DS1307RTC  libraries http://playground.arduino.cc/Code/time

Step 1:

conect rtc to arduino.

conect  SDA  to Arduino A4.
conect  SCL  to Arduino A5.
conect vcc to  +5v
conect gnd to gnd

Step 2: Conect Lcd

LCD to Arduino
1 GND
2 +
3 center of potentiometer
4 pin 12 Arduino.
5 GND
6 Pin 11 Arduino
11 Pin 5 Arduino
12 Pin 4 Arduino
13 Pin 3 Arduino
14 Pin 2 Arduino
15 +
16 Gnd

Step 3: The Set Rtc Sketch From Member WWC. Don't Use This Example Where U Change the Time.

the serial input didn 't work for me so i ad the time to the sketch.
 
dont use this one . only for EXAMPLE where u have to enter the time .

// This set of codes is allows input of data
void setTime() {
  Serial.print("Please enter the current year, 00-99. - ");
  year = 13;
  Serial.println(year);
  Serial.print("Please enter the current month, 1-12. - ");
  month = 9;
  Serial.println(months[month-1]);
  Serial.print("Please enter the current day of the month, 1-31. - ");
  monthday = 20;
  Serial.println(monthday);
  Serial.println("Please enter the current day of the week, 1-7.");
  Serial.print("1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
  weekday = 6;
  Serial.println(days[weekday-1]);
  Serial.print("Please enter the current hour in 24hr format, 0-23. - ");
  hour = 13;
  Serial.println(hour);
  Serial.print("Please enter the current minute, 0-59. - ");
  minute = 51;
  Serial.println(minute);
  second = 15;
  Serial.println("The data has been entered.");

Step 4: The Set Rtc Sketch From Member WWC. Take This.

you have to enter your time ,upload and then open serial and hit y and send.

//////////////////////////////////////////
// RTC data and time setter              //
//                                       //
// This sample program allows the user   //
// to set the date and time of an RTC    //
// using I2C.                            //
//                                       //
// Codes by:                             //
// eGizmo Mechatronix Central            //
// Taft, Manila, Philippines             //
// http://www.egizmo.com                 //
// April 15, 2013                        //
///////////////////////////////////////////

#include <Wire.h>
const int DS1307 = 0x68; // Address of DS1307 see data sheets
const char* days[] =
{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
const char* months[] =
{"January", "February", "March", "April", "May", "June", "July", "August","September", "October", "November", "December"};

// Initializes all values:
byte second = 0;
byte minute = 0;
byte hour = 0;
byte weekday = 0;
byte monthday = 0;
byte month = 0;
byte year = 0;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  delay(2000); // This delay allows the MCU to read the current date and time.

  Serial.print("The current date and time is: ");
  printTime();
  Serial.println("Please change to newline ending the settings on the lower right of the Serial Monitor");
  Serial.println("Would you like to set the date and time now? Y/N");

  while (!Serial.available()) delay(10);
  if (Serial.read() == 'y' || Serial.read() == 'Y')

  // This set of functions allows the user to change the date and time
  {
    Serial.read();
    setTime();
    Serial.print("The current date and time is now: ");
    printTime();
  }


  Serial.println("Thank you.");
}

// Continuous function for converting bytes to decimals and vice versa
void loop() {
}
byte decToBcd(byte val) {
  return ((val/10*16) + (val%10));
}
byte bcdToDec(byte val) {
  return ((val/16*10) + (val%16));
}


// This set of codes is allows input of data
void setTime() {
  Serial.print("Please enter the current year, 00-99. - ");
  year = 13;
  Serial.println(year);
  Serial.print("Please enter the current month, 1-12. - ");
  month = 9;
  Serial.println(months[month-1]);
  Serial.print("Please enter the current day of the month, 1-31. - ");
  monthday = 20;
  Serial.println(monthday);
  Serial.println("Please enter the current day of the week, 1-7.");
  Serial.print("1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - ");
  weekday = 6;
  Serial.println(days[weekday-1]);
  Serial.print("Please enter the current hour in 24hr format, 0-23. - ");
  hour = 13;
  Serial.println(hour);
  Serial.print("Please enter the current minute, 0-59. - ");
  minute = 51;
  Serial.println(minute);
  second = 15;
  Serial.println("The data has been entered.");

  // The following codes transmits the data to the RTC
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.write(decToBcd(weekday));
  Wire.write(decToBcd(monthday));
  Wire.write(decToBcd(month));
  Wire.write(decToBcd(year));
  Wire.write(byte(0));
  Wire.endTransmission();
  // Ends transmission of data
}


byte readByte() {
  while (!Serial.available()) delay(10);
  byte reading = 0;
  byte incomingByte = Serial.read();
  while (incomingByte != '\n') {
    if (incomingByte >= '0' && incomingByte <= '9')
      reading = reading * 10 + (incomingByte - '0');
    else;
    incomingByte = Serial.read();
  }
  Serial.flush();
  return reading;
}


void printTime() {
  char buffer[3];
  const char* AMPM = 0;
  readTime();
  Serial.print(days[weekday-1]);
  Serial.print(" ");
  Serial.print(months[month-1]);
  Serial.print(" ");
  Serial.print(monthday);
  Serial.print(", 20");
  Serial.print(year);
  Serial.print(" ");
  if (hour > 12) {
    hour -= 12;
    AMPM = " PM";
  }
  else AMPM = " AM";
  Serial.print(hour);
  Serial.print(":");
  sprintf(buffer, "%02d", minute);
  Serial.print(buffer);
  Serial.println(AMPM);
}


void readTime() {
  Wire.beginTransmission(DS1307);
  Wire.write(byte(0));
  Wire.endTransmission();
  Wire.requestFrom(DS1307, 7);
  second = bcdToDec(Wire.read());
  minute = bcdToDec(Wire.read());
  hour = bcdToDec(Wire.read());
  weekday = bcdToDec(Wire.read());
  monthday = bcdToDec(Wire.read());
  month = bcdToDec(Wire.read());
  year = bcdToDec(Wire.read());
}

Step 5: Now Upload This to See the Time on Your Lcd.

/*
* TimeRTC.pde
* example code illustrating Time library with Real Time Clock.
*
*/

#include <Time.h> 
#include <Wire.h> 
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t
#include <LiquidCrystal.h> 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()  {
  lcd.begin(16, 2);
 
 

  Serial.begin(9600);
  setSyncProvider(RTC.get);   // the function to get the time from the RTC
  if(timeStatus()!= timeSet)
     Serial.println("Unable to sync with the RTC");
  else
     Serial.println("RTC has set the system time");
    
}

void loop()
{
   digitalClockDisplay(); 
   delay(1000);
}

void digitalClockDisplay(){
  // digital clock display of the time
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
 
lcd.setCursor(2, 0);                                            // Set LCD cursor position (column, row)
lcd.print(hour());
lcd.print(":");
lcd.print (minute());
lcd.print(" ");
lcd.print(second());
lcd.print(" ");
lcd.print("Uhr");
lcd.setCursor(3, 1);                                           // Set LCD cursor position (column,row) 
lcd.print(day());
lcd.print(".");
lcd.print(month());
lcd.print(".");
lcd.print(year());

// Print text to LCD
                                     // Delay to read text
                               // Clear the display

}

void printDigits(int digits){
  // utility function for digital clock display: prints preceding colon and leading 0
  Serial.print(":");
  if(digits < 10)
    Serial.print('0');
  Serial.print(digits);
}

Comments

author
DiamondB7 (author)2017-05-17

nothing is showing om my lcd screen

author
ajaygupta1974 (author)2017-04-24

Hello When I try to upload the sketch it gives the error

'setSyncProvider' was not declared in this scope

Can you please help

author
mpbenoit55 (author)2016-08-07

Very nice! What would the code be if I wanted to reduce lcd wiring to 4 wires with an I2C?

author
citin (author)mpbenoit552016-08-23

? don t know.

author
matthewtweedie (author)2016-08-22

cool

author
DorisNorris (author)2016-05-28

Amazing

author
Davidecristiana (author)2016-04-24

good work

author
cafeitduong (author)2016-03-14

What happen when RTC module ran out of battery? Do I have to connect the Arduino and reload the sketch?

author
abadhe (author)2014-09-28

how to set alarm using same library on rtc arduino??or timed event?

plz helppp

author
nikhilbadhe11 (author)2014-09-17

Rtc again shows garbage values..i followed all steps..plz help.......

The current date and time is: 165, 20165 153:165 PM

Please change to newline ending the settings on the lower right of the Serial Monitor

Would you like to set the date and time now? Y/N

Please enter the current year, 00-99. - 14

Please enter the current month, 1-12. - September

Please enter the current day of the month, 1-31. - 17

Please enter the current day of the week, 1-7.

1 Sun | 2 Mon | 3 Tues | 4 Weds | 5 Thu | 6 Fri | 7 Sat - Wednesday

Please enter the current hour in 24hr format, 0-23. - 13

Please enter the current minute, 0-59. - 13

The data has been entered.

The current date and time is now: 165, 20165 153:165 PM

Thank you.

DSC_0275.JPGDSC_0274.JPG
author
citin (author)2014-09-14

@ nikhilbadhe11

conect it to 5 volt not to 3volt,

pherhaps it is broken? check your soldering , and take a look at this https://www.instructables.com/id/Setting-the-DS1307... they have the same trouble.

author
nikhilbadhe11 (author)2014-09-12

my rtc shows this garbage value time . 165/165/165 45:165:165

after setting it also shows same wrong time ..plz help me..

author
citin (author)2014-08-06

dear ash124.

step 3 is only an exemple there´s a bug in it. iwalked around it by entering the time at the big letters year,month,monthday.weekday,hour,minute direct in the skript. than i uploadet it. you have to take step 4 enter your time like shown in step 3 and upload it.

author
ash124 (author)2014-08-05

Hi!

I am facing the same problem as stuartsjg faced ...i-e when i pressed "Y" i got the message of thank you in the serial monitor ,and during this action i had disabled the newline ,still i got the same problem it looks like that the program is not jumping to the setTime() loop... here is the picture of serial monitor..plz help me out in this

oops.png
author
Oliverhall (author)2014-03-23

Nice tutorial. Very helpful!

They sell the DS1307 on this webstore: http://voltatek.com/en/sensors/34-i2c-rtc-ds1307-a...

author
citin (author)Oliverhall2014-03-23

thx they sell it to http://www.amazon.de/s/?ie=UTF8&keywords=rtc+ds1307&tag=googhydr08-21&index=aps&hvadid=28697841386&hvpos=1t1&hvexid=&hvnetw=g&hvrand=17162271407903030750&hvpone=&hvptwo=&hvqmt=b&hvdev=t&ref=pd_sl_4rfh8wen50_b

About This Instructable

91,491views

74favorites

License:

More by citin:Clock ,RTC DS1307  SET AND SHOW THE TIME ON YOUR LCD.Arduino LCD Thermometer / temperature control with TMP36GZ Temp sensor added 2 chanel relay, added RTC ds1307 , added a case.based on WWC Guide .
Add instructable to: