Lets assume that you bought a RTC for irrigation or any other project and you wish to add the correct day and year, time as well . so here is how to do that
Thats the RTC unit that you can buy for less than 2 $ from Ebay
http://www.ebay.com/itm/Small-DS3231-AT24C32-IIC-High-Precision-Real-Time-Clock-Module-Arduino-/282248813661?hash=item41b7571c5d:g:Df8AAOSwHMJYIffZ
The wiring
Here is the code
#include "Wire.h"
#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int button_pin = 12; // YOU ADD HIGH AT THIS PIN TO SETUP THE TIME
int buttonState = 0;
byte set_second = 0; //YOU ADD THE CURRENT DAY, TIME ETC
byte set_minute = 06;
byte set_hour = 18;
byte set_day = 7;
byte set_date = 27;
byte set_month = 5;
byte set_year = 17;
byte read_second;
byte read_minute;
byte read_hour;
byte read_day;
byte read_date;
byte read_month;
byte read_year;
byte bcd_to_Dec(byte val)
{
return ( (val / 16 * 10) + (val % 16) );
}
byte dec_to_bcd(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(button_pin, INPUT);
buttonState = digitalRead(button_pin);
if (buttonState == HIGH) {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0);
Wire.write(dec_to_bcd(set_second));
Wire.write(dec_to_bcd(set_minute));
Wire.write(dec_to_bcd(set_hour));
Wire.write(dec_to_bcd(set_day));
Wire.write(dec_to_bcd(set_date));
Wire.write(dec_to_bcd(set_month));
Wire.write(dec_to_bcd(set_year));
Wire.endTransmission();
} else {}
lcd.begin(16, 2);
lcd.clear();
}
void loop() {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
read_second = bcd_to_Dec(Wire.read());
read_minute = bcd_to_Dec(Wire.read());
read_hour = bcd_to_Dec(Wire.read());
read_day = bcd_to_Dec(Wire.read());
read_date = bcd_to_Dec(Wire.read());
read_month = bcd_to_Dec(Wire.read());
read_year = bcd_to_Dec(Wire.read());
lcd.clear();
Serial.println();
lcd.setCursor(0, 0);
if (read_hour < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_hour);
Serial.print (read_hour);
lcd.print(":");
Serial.print(":");
if (read_minute < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_minute);
Serial.print (read_minute);
lcd.print(":");
Serial.print(":");
if (read_second < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_second);
Serial.print (read_second);
Serial.println();
if ( read_day == 1)
{
lcd.print("Sun");
Serial.print ("Sun");
}
if ( read_day == 2)
{
lcd.print("Mon");
Serial.print ("Mon");
}
if ( read_day == 3)
{
lcd.print("Tue");
Serial.print ("Tue");
}
if ( read_day == 4)
{
lcd.print("Wed");
Serial.print ("Wed");
}
if ( read_day == 5)
{
lcd.print("Thu");
Serial.print ("Thu");
}
if ( read_day == 6)
{
lcd.print("Fri");
Serial.print ("Fri");
}
if ( read_day == 7)
{
lcd.print("Sat");
Serial.print ("Sat");
}
Serial.println();
lcd.setCursor(0, 1);
lcd.print(read_date);
Serial.print (read_date);
lcd.print("/");
Serial.print("/");
lcd.print(read_month);
Serial.print (read_month);
lcd.print("/");
Serial.print("/");
lcd.print(read_year);
Serial.print (read_year);
delay(1000);
}
Thats the RTC unit that you can buy for less than 2 $ from Ebay
http://www.ebay.com/itm/Small-DS3231-AT24C32-IIC-High-Precision-Real-Time-Clock-Module-Arduino-/282248813661?hash=item41b7571c5d:g:Df8AAOSwHMJYIffZ
The wiring
Here is the code
#include "Wire.h"
#include <LiquidCrystal.h>
#define DS1307_ADDRESS 0x68
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
int button_pin = 12; // YOU ADD HIGH AT THIS PIN TO SETUP THE TIME
int buttonState = 0;
byte set_second = 0; //YOU ADD THE CURRENT DAY, TIME ETC
byte set_minute = 06;
byte set_hour = 18;
byte set_day = 7;
byte set_date = 27;
byte set_month = 5;
byte set_year = 17;
byte read_second;
byte read_minute;
byte read_hour;
byte read_day;
byte read_date;
byte read_month;
byte read_year;
byte bcd_to_Dec(byte val)
{
return ( (val / 16 * 10) + (val % 16) );
}
byte dec_to_bcd(byte val)
{
return ( (val / 10 * 16) + (val % 10) );
}
void setup() {
Wire.begin();
Serial.begin(9600);
pinMode(button_pin, INPUT);
buttonState = digitalRead(button_pin);
if (buttonState == HIGH) {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0);
Wire.write(dec_to_bcd(set_second));
Wire.write(dec_to_bcd(set_minute));
Wire.write(dec_to_bcd(set_hour));
Wire.write(dec_to_bcd(set_day));
Wire.write(dec_to_bcd(set_date));
Wire.write(dec_to_bcd(set_month));
Wire.write(dec_to_bcd(set_year));
Wire.endTransmission();
} else {}
lcd.begin(16, 2);
lcd.clear();
}
void loop() {
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7);
read_second = bcd_to_Dec(Wire.read());
read_minute = bcd_to_Dec(Wire.read());
read_hour = bcd_to_Dec(Wire.read());
read_day = bcd_to_Dec(Wire.read());
read_date = bcd_to_Dec(Wire.read());
read_month = bcd_to_Dec(Wire.read());
read_year = bcd_to_Dec(Wire.read());
lcd.clear();
Serial.println();
lcd.setCursor(0, 0);
if (read_hour < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_hour);
Serial.print (read_hour);
lcd.print(":");
Serial.print(":");
if (read_minute < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_minute);
Serial.print (read_minute);
lcd.print(":");
Serial.print(":");
if (read_second < 10)
{
lcd.print("0");
Serial.print ("0");
}
lcd.print(read_second);
Serial.print (read_second);
Serial.println();
if ( read_day == 1)
{
lcd.print("Sun");
Serial.print ("Sun");
}
if ( read_day == 2)
{
lcd.print("Mon");
Serial.print ("Mon");
}
if ( read_day == 3)
{
lcd.print("Tue");
Serial.print ("Tue");
}
if ( read_day == 4)
{
lcd.print("Wed");
Serial.print ("Wed");
}
if ( read_day == 5)
{
lcd.print("Thu");
Serial.print ("Thu");
}
if ( read_day == 6)
{
lcd.print("Fri");
Serial.print ("Fri");
}
if ( read_day == 7)
{
lcd.print("Sat");
Serial.print ("Sat");
}
Serial.println();
lcd.setCursor(0, 1);
lcd.print(read_date);
Serial.print (read_date);
lcd.print("/");
Serial.print("/");
lcd.print(read_month);
Serial.print (read_month);
lcd.print("/");
Serial.print("/");
lcd.print(read_year);
Serial.print (read_year);
delay(1000);
}
