#include <Wire.h>
#define DS1307_ADDRESS 0x68 /* I2C address of the DS1307 RTC */
#define SECONDS_REGISTER 0x00
#define MINUTES_REGISTER 0x01
#define HOURS_REGISTER 0x02
#define DAY_REGISTER 0x03
#define DATE_REGISTER 0x04
#define MONTH_REGISTER 0x05
#define YEAR_REGISTER 0x06
uint8_t RTC_Mem[8]; /* Memory for the RTC */
void readRTC(void) {
uint8_t i;
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(SECONDS_REGISTER); /* Start at the seconds register */
Wire.endTransmission();
Wire.requestFrom(DS1307_ADDRESS, 7); /* Request 7 bytes */
for(i=0; i<7; i++){
RTC_Mem[i] = Wire.read();
}
}
void setup() {
Wire.begin(); /* Start I2C communication */
Serial.begin(9600); /* Start serial communication for debugging */
Wire.beginTransmission(DS1307_ADDRESS);
Wire.write(SECONDS_REGISTER); /* Start at the seconds register */
Wire.write(0x00);
Wire.endTransmission();
}
void loop() {
uint8_t temp;
readRTC();
temp = 0;
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print("Date: ");
Serial.print(temp);
Serial.print("/");
temp = 0;
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(temp);
Serial.print("/");
temp = 0;
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(2000 + temp); /* The DS1307 returns years since 2000 */
Serial.print(" Time: ");
temp = 0;
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(temp);
Serial.print(":");
temp = RTC_Mem[MINUTES_REGISTER];
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(temp);
temp = RTC_Mem[SECONDS_REGISTER] & 0x7F;
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(":");
Serial.println(temp);
delay(1000); /* Wait for 1 second before updating the time again */
}