DS3231 Alarm not working (FIXED)

Hello all, I am working on a project that takes an arduino nano, relay and ds3231 and turns on and off a water pump at a certain time each day to water my garden. I'm having trouble as my code was working a few days ago, but now wont work and my relay turns on and off in a loop. my code is as follows.


#include "Arduino.h"
#include <avr/sleep.h>
#include <Wire.h>
#include <DS3231.h>

DS3231 myRTC;

byte alarmDay;
byte alarmHour;
byte alarmMinute;
byte alarmSecond;
byte alarmBits;
bool alarmDayIsDay;
bool alarmH12;
bool alarmPM;

#define wakePin 3   // when low, makes 328P wake up, must be an interrupt pin (2 or 3 on ATMEGA328P)
#define relayPin 4


void setup() {
  Wire.begin();
  Serial.begin(9600);
  pinMode(wakePin, INPUT_PULLUP);
  pinMode(relayPin, HIGH);
  digitalWrite(relayPin, HIGH);
  reset_alarm();

}

void loop() {

if (digitalRead(wakePin) == LOW){
  Serial.println("ALARM WORKED");
  digitalWrite(relayPin, LOW);
  delay(60000);
  digitalWrite(relayPin, HIGH);
  // set new alarm interupt
  reset_alarm();

   // go back to sleep
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    MCUCR = bit (BODS) | bit (BODSE);
    MCUCR = bit (BODS);
    noInterrupts();
    attachInterrupt(digitalPinToInterrupt(wakePin), sleepISR, LOW);
    interrupts();
    sleep_cpu();

  }
}


void reset_alarm(){


   alarmDay = 0;
   alarmHour = 21;
   alarmMinute = 43;
   alarmSecond = 30;
   alarmBits = 0b00001000; // Alarm 1 every day
   alarmDayIsDay = false;
   alarmH12 = false;
   alarmPM = false;    

    myRTC.turnOffAlarm(1);
    myRTC.setA1Time(
       alarmDay, alarmHour, alarmMinute, alarmSecond,
       alarmBits, alarmDayIsDay, alarmH12, alarmPM);
    // enable Alarm 1 interrupts
    myRTC.turnOnAlarm(1);
    // clear Alarm 1 flag
    myRTC.checkIfAlarm(1);


 alarmMinute = 0xFF; // a value that will never match the time
    alarmBits = 0b01100000; // Alarm 2 when minutes match, i.e., never
    
    // Upload the parameters to prevent Alarm 2 entirely
    myRTC.setA2Time(
        alarmDay, alarmHour, alarmMinute,
        alarmBits, alarmDayIsDay, alarmH12, alarmPM);
    // disable Alarm 2 interrupt
    myRTC.turnOffAlarm(2);
    // clear Alarm 2 flag
    myRTC.checkIfAlarm(2);


}

// When wakePin is brought LOW this interrupt is triggered FIRST (even in PWR_DOWN sleep)
void sleepISR() {
  // Prevent sleep mode, so we don't enter it again, except deliberately, by code
  sleep_disable();

  // Detach the interrupt that brought us out of sleep
  detachInterrupt(digitalPinToInterrupt(wakePin));

  // Now we continue running the main Loop() just after we went to sleep
}

any help would be appreciated.

update: the other day i plugged in my nano into 12v via the usb cable. Doing so damaged the clock, nano, and as i just found out the relay too. sorry if I wasted anyones time but my automatic sprinkler system works :slight_smile:

ouch!
You probably won’t do that again!

Good luck.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.