// setIntAlarm-1 // Programmet illustrerer hvordan man kan sette opp et interrupt fra DS3231 // med jevne intervaller i sekunder (10 - 6=), minutter (1 - 60 eller timer 1 - 24. // Når match oppnås legges interuptutgangen lav (SQR). #include #include "ds3231.h" #define BUFF_MAX 256 // Tid for oppvekking uint8_t wake_HOUR = 0; uint8_t wake_MINUTE = 0; uint8_t wake_SECOND = 0; uint8_t wake_interval_HOUR = 0; uint8_t wake_interval_MINUTE = 0; uint8_t wake_interval_SECOND = 10; // 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(); Serial.print("setIntAlarm-1"); } void loop() { printTime(); delay(1000); if (digitalRead(pinRTCINT) == 0) { Serial.println("Alarmen er utløst"); // Resett interrupt-linjen (high-z) delay(2000); set_alarm(); 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) { // Beregne neste tidspunkt wake_SECOND = wake_SECOND + wake_interval_SECOND; if(wake_SECOND >= 60) {wake_SECOND = wake_SECOND - 60;} wake_MINUTE = wake_MINUTE + wake_interval_MINUTE; if(wake_MINUTE >= 60) {wake_MINUTE = wake_MINUTE - 60;} wake_HOUR = wake_HOUR + wake_interval_HOUR; if(wake_HOUR >= 24) {wake_HOUR = wake_HOUR - 24;} // 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); }