/* RTC DS1307 interrupt demo */ #include int ledp = 13; int intp = 2; // dig port int0:PD2 (dig-2) volatile boolean ledst = LOW; volatile boolean intst = LOW; // DS1307 registers #define DS1307 0xD0 >> 1 // ID code #define RTsec 0 //#define RTmin 1 //#define RThour 2 // DS1307 buffer byte sec, xmin, hour, day, date, month, year, ctrl; void setup(){ Serial.begin(19200); Wire.begin(); pinMode(ledp,OUTPUT); pinMode(intp,INPUT); sec = 0x55; xmin = 0x59; hour = 0x23; day = 0x07; date = 0x31; month = 0x12; year = 0x08; ctrl = 0x10; SetClock(); Serial.println("demo RTC interrupt\n"); attachInterrupt(0,RTCint, CHANGE); // setup interrupt } void RTCint(){ if(digitalRead(intp) == LOW){ intst = HIGH; // set interrupt status digitalWrite(ledp,HIGH); }else digitalWrite(ledp,LOW); } void loop(){ while(intst == 0); // wait for interrupt GetClock(); printhex(hour); Serial.print(":"); printhex(min); Serial.print(":"); printhex(sec); Serial.println(); intst = 0; // reset int status } void SetClock(){ Wire.beginTransmission(DS1307); Wire.write(RTsec); Wire.write(sec); Wire.write(xmin); Wire.write(hour); Wire.write(day); Wire.write(date); Wire.write(month); Wire.write(year); Wire.write(ctrl); Wire.endTransmission(); } void GetClock(){ Wire.beginTransmission(DS1307); Wire.write(RTsec); Wire.endTransmission(); Wire.requestFrom(DS1307,8); sec = Wire.read(); xmin = Wire.read(); hour = Wire.read(); day = Wire.read(); date = Wire.read(); month = Wire.read(); year = Wire.read(); ctrl = Wire.read(); } void printhex(byte val){ if(val < 0x10) Serial.print(val); else Serial.print(val,HEX); }