#概要
DS3231にはアラーム機能がついてる。
このアラーム機能を使ってDeepSleepモード中のESP8266をオンにしたい。
ただ、DS3231にはアラーム機能がよくわからないのでまとめて見る。
違ってたらご指摘お願いします。
#アラーム機能
アラーム機能はalarm1,alarm2があるようです
###alarm1
1-1.1秒に1回のアラームが発生する
1-2.分と秒が一致するとアラームが発生する
1-3.時、分、秒が一致するとアラームが発生する
1-4.日、時、分、秒が一致するとアラームが発生する
1-5.曜日、時、分、秒が一致するとアラームが発生する
###alarm2
2-1.1分間に1回アラーム(毎分00秒)が発生する
2-2.分が一致したときのアラームが発生する
2-3.時、分が一致するとアラームが発生する
2-4.日、時、分が一致するとアラームが発生する
2-5.曜日、時、分が一致するとアラームが発生する
難しいと思っていたけど、alarm1は秒単位で指定、alarm2は分単位でアラームを
指定できるってことのようです。
こちらのサイトにも関連記事があります。
http://blogs.yahoo.co.jp/dascomp21/68145713.html
データーシート
https://datasheets.maximintegrated.com/en/ds/DS3231.pdf
#アラーム機能を使う
https://github.com/jarzebski/Arduino-DS3231
DS3231_alarm.inoを書き込んでお試しした。
例
30秒毎にタイマーをセットしました。
#include <Wire.h>
#include <DS3231.h>
DS3231 clock;
RTCDateTime dt;
void setup()
{
Serial.begin(115200);
Serial.println("Initialize DS3231");;
clock.begin();
clock.armAlarm1(false);
clock.armAlarm2(false);
clock.clearAlarm1();
clock.clearAlarm2();
clock.setAlarm1(0, 0, 0, 30, DS3231_MATCH_S);
clock.setAlarm2(0, 0, 0, DS3231_EVERY_MINUTE);
}
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 manualy by clearAlarm1();
if (clock.isAlarm1())
{
Serial.println("ALARM 1 TRIGGERED!");
}
// Call isAlarm2(false) if you want clear alarm1 flag manualy by clearAlarm2();
if (clock.isAlarm2())
{
Serial.println("ALARM 2 TRIGGERED!");
}
delay(1000);
}
setAlarm1(曜日 or 日, 時, 分, 秒, mode)
setAlarm2(曜日 or 日, 時, 分, mode)
例
Alarm1で30秒になったら、Alarm2で毎分アラームが発生するように設定
clock.setAlarm1(0, 0, 0, 30, DS3231_MATCH_S);
clock.setAlarm2(0, 0, 0, DS3231_EVERY_MINUTE);
#まとめ
何日、何時、何分、何秒と言うのは設定でできるけど、15秒毎とか10分毎と言うのは
プログラム上に仕掛けが必要です。
なんか、おもってたんと違う感じです。