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

99,443

74

19

Published

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);
}

Share

    Recommendations

    • Water Contest

      Water Contest
    • Clocks Contest

      Clocks Contest
    • Oil Contest

      Oil Contest

    19 Discussions

    I have been trying for months to show the time on my LCD using Mega 2560,RTC 1307 and a 16x2 LCD with no luck(can't even find any sketches)well with urs I get 'setSyncProvider' was not declared in this scope on line setSyncProvider(RTC.get); // the function to get the time from the RTC is the problems don't know what this means!

    2 more answers

    Go to step 3 .
    Enter the time in the Sketch.

    the serial input didn 't work for me so i ad the time to the sketch.

    In step 3 you will see here u have to enter the time .

    nothing is showing om my lcd screen

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

    'setSyncProvider' was not declared in this scope

    Can you please help

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

    1 reply

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

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

    plz helppp

    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

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

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

    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.

    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
    1 reply
    0
    user
    citin

    Reply 4 years ago

    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