RTC syncronize with PC

Synchronize DS3231 RTC with PC

Posted on

Synchronize DS3231 RTC PC – Previously I had made an article titled Arduino and RTC DS3231 Easy Way. In the article, I have already told you how to read time data from RTC. But how do you make the time on the RTC and PC the same? We must synchronize.

This synchronization is done only once to make the RTC time equal to the current time. If you already have the DS1307RTC.zip library, please follow the steps below. If not, please read the tutorial here.

The steps are:

  • Open Arduino Click the File Menu> Example
  • Select the DS1307RTC list
  • Then click the SetTime menu list.

You will see the program as follows. Please upload the following program to your Arduino:

#include <Wire.h>
#include <Time.h>
#include <DS1307RTC.h>

const char *monthName[12] = {
  "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};

tmElements_t tm;

void setup() {
  bool parse=false;
  bool config=false;

  // get the date and time the compiler was run
  if (getDate(__DATE__) && getTime(__TIME__)) {
    parse = true;
    // and configure the RTC with this info
    if (RTC.write(tm)) {
      config = true;
    }
  }

  Serial.begin(9600);
  while (!Serial) ; // wait for Arduino Serial Monitor
  delay(200);
  if (parse && config) {
    Serial.print("DS1307 configured Time=");
    Serial.print(__TIME__);
    Serial.print(", Date=");
    Serial.println(__DATE__);
  } else if (parse) {
    Serial.println("DS1307 Communication Error :-{");
    Serial.println("Please check your circuitry");
  } else {
    Serial.print("Could not parse info from the compiler, Time=\"");
    Serial.print(__TIME__);
    Serial.print("\", Date=\"");
    Serial.print(__DATE__);
    Serial.println("\"");
  }
}

void loop() {
}

bool getTime(const char *str)
{
  int Hour, Min, Sec;

  if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
  tm.Hour = Hour;
  tm.Minute = Min;
  tm.Second = Sec;
  return true;
}

bool getDate(const char *str)
{
  char Month[12];
  int Day, Year;
  uint8_t monthIndex;

  if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
  for (monthIndex = 0; monthIndex < 12; monthIndex++) {
    if (strcmp(Month, monthName[monthIndex]) == 0) break;
  }
  if (monthIndex >= 12) return false;
  tm.Day = Day;
  tm.Month = monthIndex + 1;
  tm.Year = CalendarYrToTm(Year);
  return true;
}

Open Serial Monitor in your Arduino and will show result like this:

Read other articles  Arduino and RTC DS3231 Easy Way

Syncronize RTC DS3231 With PC

Synchronization DS3231 RTC is done. Hopefully this article is useful for everyone.

Leave a Reply

Your email address will not be published. Required fields are marked *