時計(RTC)

時計として使うためのライブラリです。年、月、日、曜日、時、分、秒を設定後、時計として機能します。アラームを設定してアラーム発生時に特定の処理を行うこともできます。クラス用のライブラリも用意されていますが、このリファレンスでは記述していませんので、適宜ライブラリソースを参照してください。ライブラリを使用するには、#include <RTC.h>を記述してください。

rtc_init

概要
初期化を行います。
文法
int rtc_init()
パラメータ
なし
戻り値
0:失敗、1:成功、2:既に初期化済み

rtc_deinit

概要
時計を停止します。
文法
int rtc_deinit()
パラメータ
なし
戻り値
0:失敗、1:成功

rtc_set_time

概要
時間を設定します。
文法
int rtc_set_time(RTC_TIMETYPE *time)
パラメータ
time: RTC_TIMETYPE型で設定した時刻の構造体を指定します。
戻り値
0:失敗、1:成功
補足
時刻設定についてはサンプルプログラムを参照ください。

rtc_get_time

概要
時刻を取得します。
文法
int rtc_get_time(RTC_TIMETYPE *time)
パラメータ
time: 時刻を格納するRTC_TIMETYPE型の構造体を指定します。
戻り値
0:失敗、1:成功

rtc_attach_alarm_handler

概要
アラーム発生時に処理する関数を登録します。
文法
rtc_attach_alarm_handler(void(*)(void) function)
パラメータ
function: 処理する関数
戻り値
なし

rtc_set_alarm_time

概要
アラーム時間を設定します。
文法
int rtc_set_alarm_time (int hour, int min, int week_flag)
パラメータ
hour: 時
min: 分
week_flag: 曜日(複数指定の場合は論理和で指定)
戻り値
0:失敗、1:成功

rtc_alarm_on

概要
アラームをONにします。
文法
rtc_alarm_on()
パラメータ
なし
戻り値
なし

rtc_alarm_off

概要
アラームをOFFにします。
文法
rtc_alarm_off()
パラメータ
なし
戻り値
なし

マクロ定義

曜日
RTC_WEEK_SUNDAY: 0x00
RTC_WEEK_MONDAY: 0x01
RTC_WEEK_TUESDAY: 0x02
RTC_WEEK_WEDNESDAY: 0x03
RTC_WEEK_THURSDAY: 0x04
RTC_WEEK_FRIDAY: 0x05
RTC_WEEK_SATURDAY: 0x06
アラーム用曜日
RTC_ALARM_SUNDAY: 0x01
RTC_ALARM_MONDAY: 0x02
RTC_ALARM_TUESDAY: 0x04
RTC_ALARM_WEDNESDAY: 0x08
RTC_ALARM_THURSDAY: 0x10
RTC_ALARM_FRIDAY: 0x20
RTC_ALARM_SATURDAY: 0x40
RTC_ALARM_EVERYDAY: 上記全ての論理和

サンプルプログラム

時刻とアラームを設定するプログラムです。シリアル通信で時刻を出力し、1分後にアラームでメッセージを表示します。


#include <Arduino.h>
#include <RTC.h>
 
void alarm_handler();
RTC_TIMETYPE t;
 
void setup()
{
  Serial.begin(9600);
  pinMode(PIN_LED0, OUTPUT); //blue led for alarm
  digitalWrite(PIN_LED0, HIGH); //turn off
  int err = rtc_init();
 
  t.year    = 2016;
  t.mon     = 3;
  t.day     = 22;
  t.weekday = RTC_WEEK_TUESDAY;
  t.hour    = 9;
  t.min     = 20;
  t.second  = 50;
 
  err = rtc_set_time(&t);
  rtc_attach_alarm_handler(alarm_handler);
  err = rtc_set_alarm_time(t.hour, t.min + 1);
 
}
 
void loop()
{
  int err;
  err = rtc_get_time(&t);
 
  Serial.print(t.year, DEC);Serial.print("/");
  Serial.print(t.mon, DEC); Serial.print("/");
  Serial.print(t.day, DEC); Serial.print(" ");
  Serial.print(t.hour, DEC); Serial.print(":");
  Serial.print(t.min, DEC); Serial.print(":");
  Serial.println(t.second, DEC);
 
  delay(500);
 
}
 
void alarm_handler()
{
  digitalWrite(PIN_LED0, LOW);//blue led for alarm
 
}