// Programmet illustrerer hvordan man kan sette opp et interrupt fra DS3231 // Når det oppnåes match mellom et på forhånd definert tidspunkt og nåtiden, // legges interuptutgangen lav (SQR). En kan også bestemme om match gjelder // bare timer, minutter eller sekunder, ev. en kombinasjon av disse. #include #include "ds3231.h" #define BUFF_MAX 256 // Tid for oppvekking uint8_t wake_HOUR = 15; uint8_t wake_MINUTE = 49; uint8_t wake_SECOND = 59; // Hyppigheten for oppdatering int pinRTCINT = 3; void setup() { Serial.begin(9600); pinMode(pinRTCINT,INPUT); Wire.begin(); DS3231_init(DS3231_INTCN); DS3231_clear_a1f(); set_alarm(); } void loop() { printTime(); delay(1000); if (digitalRead(pinRTCINT) == 0) { Serial.println("Alarmen er utløst"); // Resett interrupt-linjen (high-z) delay(5000); DS3231_clear_a1f(); } } void printTime() { struct ts t; DS3231_get(&t); // Hent tiden fra DS3231 Serial.print(t.mday); Serial.print("/"); Serial.print(t.mon); Serial.print(" "); Serial.print(t.year+100); Serial.print(" "); Serial.print(t.hour); Serial.print(":"); Serial.print(t.min); Serial.print(":"); Serial.print(t.sec); Serial.println(""); } void set_alarm(void) { // flags[] angir hvilke komponenter i dato og tid som skal sjekkes for å gi alarm // A1M1 (seconds) (0 to enable, 1 to disable) // A1M2 (minutes) (0 to enable, 1 to disable) // A1M3 (hour) (0 to enable, 1 to disable) // A1M4 (day) (0 to enable, 1 to disable) // DY/DT (dayofweek == 1/dayofmonth == 0) //Sjekker {sek, min, timer, dag, dag i uke/måned} uint8_t flags[5] = { 0, 1, 1, 1, 1 }; // Sett Alarm1 DS3231_set_a1(wake_SECOND, wake_MINUTE, wake_HOUR, 0, flags); // Aktiver Alarm1 DS3231_set_creg(DS3231_INTCN | DS3231_A1IE); }