DS3231 Real Time Alarm Clock Module Turn Buzzer and LED ON
DS3231 Real Time Alarm Clock Module Turn Buzzer and LED ON
This video explains how to use DS3231 Rreal Time Clock Module with Arduino. In the video instruction :- Simple date and time has been demonstrated and code has been explained
- Date format has been demonstrated and code has been explained
- Two Alarms has been demonstrated and code has been explained by controlling buzzer and LED for both alarms
- I2C Scanner to find out the I2C address for this module
- Download DS3231 Library zip file (from robojax.com)
- Download DS3231 Library zip file (from GetHub.com)
- DS3231 Datasheet (pdf)
- Arduino Course on Udemy
- Patreon Account
/*
*
DS3231: Real-Time Clock. Alarm simple
Alarm Pins have been defined to turn Buzzer ON
Updated by Ahmad Shamshiri on Jun 11, 2019 at 22:15
in Ajax, Ontario -- Robojax.com
You can support me on Patreon http://bit.ly/2ZnITLz
Watch video instruction for this code: https://youtu.be/7hBtXdoaAOY
Read more: www.jarzebski.pl/arduino/komponenty/zegar-czasu-rzeczywistego-rtc-DS3231.html
GIT: https://github.com/jarzebski/Arduino-DS3231
Web: http://www.jarzebski.pl
(c) 2014 by Korneliusz Jarzebski
*/
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
#define alarm1Pin 2
#define alarm2Pin 3
void setup()
{
Serial.begin(9600);
pinMode(alarm1Pin,OUTPUT);//
pinMode(alarm2Pin,OUTPUT);
// Initialize DS3231
Serial.println("Initialize DS3231");;
clock.begin();
// Disarm alarms and clear alarms for this example, because alarms is battery backed.
// Under normal conditions, the settings should be reset after power and restart microcontroller.
clock.armAlarm1(false);
clock.armAlarm2(false);
clock.clearAlarm1();
clock.clearAlarm2();
// Manual (Year, Month, Day, Hour, Minute, Second)
clock.setDateTime(2014, 4, 25, 0, 0, 0);
// Set Alarm - Every second.
// DS3231_EVERY_SECOND is available only on Alarm1.
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm1(0, 0, 0, 0, DS3231_EVERY_SECOND);
// Set Alarm - Every full minute.
// DS3231_EVERY_MINUTE is available only on Alarm2.
// setAlarm2(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm2(0, 0, 0, 0, DS3231_EVERY_MINUTE);
// Set Alarm1 - Every 20s in each minute
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
clock.setAlarm1(0, 0, 0, 20, DS3231_MATCH_S);
// Set Alarm2 - Every 01m in each hour
// setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true)
clock.setAlarm2(0, 0, 1, DS3231_MATCH_M);
// Set Alarm - Every 01m:25s in each hour
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm1(0, 0, 1, 25, DS3231_MATCH_M_S);
// Set Alarm - Every 01h:10m:30s in each day
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm1(0, 1, 10, 30, DS3231_MATCH_H_M_S);
// Set Alarm - 07h:00m:00s in 25th day in month
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm1(25, 7, 0, 0, DS3231_MATCH_DT_H_M_S);
// Set Alarm - 10h:45m:30s in every Friday (1 - Mon, 7 - Sun)
// setAlarm1(Date or Day, Hour, Minute, Second, Mode, Armed = true)
// clock.setAlarm1(5, 10, 40, 30, DS3231_MATCH_DY_H_M_S);
// Check alarm settings
checkAlarms();
}
void checkAlarms()
{
RTCAlarmTime a1;
RTCAlarmTime a2;
if (clock.isArmed1())
{
a1 = clock.getAlarm1();
Serial.print("Alarm1 is triggered ");
switch (clock.getAlarmType1())
{
case DS3231_EVERY_SECOND:
Serial.println("every second");
break;
case DS3231_MATCH_S:
Serial.print("when seconds match: ");
Serial.println(clock.dateFormat("__ __:__:s", a1));
break;
case DS3231_MATCH_M_S:
Serial.print("when minutes and seconds match: ");
Serial.println(clock.dateFormat("__ __:i:s", a1));
break;
case DS3231_MATCH_H_M_S:
Serial.print("when hours, minutes and seconds match: ");
Serial.println(clock.dateFormat("__ H:i:s", a1));
break;
case DS3231_MATCH_DT_H_M_S:
Serial.print("when date, hours, minutes and seconds match: ");
Serial.println(clock.dateFormat("d H:i:s", a1));
break;
case DS3231_MATCH_DY_H_M_S:
Serial.print("when day of week, hours, minutes and seconds match: ");
Serial.println(clock.dateFormat("l H:i:s", a1));
break;
default:
Serial.println("UNKNOWN RULE");
break;
}
} else
{
Serial.println("Alarm1 is disarmed.");
}
if (clock.isArmed2())
{
a2 = clock.getAlarm2();
Serial.print("Alarm2 is triggered ");
switch (clock.getAlarmType2())
{
case DS3231_EVERY_MINUTE:
Serial.println("every minute");
break;
case DS3231_MATCH_M:
Serial.print("when minutes match: ");
Serial.println(clock.dateFormat("__ __:i:s", a2));
break;
case DS3231_MATCH_H_M:
Serial.print("when hours and minutes match:");
Serial.println(clock.dateFormat("__ H:i:s", a2));
break;
case DS3231_MATCH_DT_H_M:
Serial.print("when date, hours and minutes match: ");
Serial.println(clock.dateFormat("d H:i:s", a2));
break;
case DS3231_MATCH_DY_H_M:
Serial.println("when day of week, hours and minutes match: ");
Serial.print(clock.dateFormat("l H:i:s", a2));
break;
default:
Serial.println("UNKNOWN RULE");
break;
}
} else
{
Serial.println("Alarm2 is disarmed.");
}
}
void loop()
{
dt = clock.getDateTime();
Serial.println(clock.dateFormat("d-m-Y H:i:s - l", dt));
// Call isAlarm1(false) if you want clear alarm1 flag manually by clearAlarm1();
if (clock.isAlarm1())
{
Serial.println("ALARM 1 TRIGGERED!");
digitalWrite(alarm1Pin,HIGH);
delay(3000);
digitalWrite(alarm1Pin,LOW);
}
// Call isAlarm2(false) if you want clear alarm1 flag manually by clearAlarm2();
if (clock.isAlarm2())
{
Serial.println("ALARM 2 TRIGGERED!");
digitalWrite(alarm2Pin,HIGH);
delay(300);
digitalWrite(alarm2Pin,LOW);
delay(300);
digitalWrite(alarm2Pin,HIGH);
delay(300);
digitalWrite(alarm2Pin,LOW);
delay(300);
digitalWrite(alarm2Pin,HIGH);
delay(300);
digitalWrite(alarm2Pin,LOW);
delay(300);
digitalWrite(alarm2Pin,HIGH);
delay(300);
digitalWrite(alarm2Pin,LOW);
}
delay(1000);
}