#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 */
uint8_t* ptrRTCmem;
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();
ptrRTCmem = &RTC_Mem[SECONDS_REGISTER]; /* Point at the beginning */
}
void loop() {
uint8_t temp;
readRTC();
Serial.print("Local Time: ");
/* hours */
temp = *(ptrRTCmem + HOURS_REGISTER);
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(temp);
Serial.print(":");
/* minutes */
temp = RTC_Mem[MINUTES_REGISTER];
temp = (temp >> 4) * 10 + (temp & 0x0F);
Serial.print(temp);
/* seconds */
temp = *(ptrRTCmem + SECONDS_REGISTER) & 0x7F;
/*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 */
}