時計(RTC)

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

rtc_attach_constant_period_interrupt_handler

概要
周期処理を行いたい関数を登録します。
文法
rtc_attach_constant_period_interrupt_handler(function)
パラメータ
function: 関数
戻り値
なし

rtc_set_constant_period_interrupt_time

概要
周期処理の間隔を指定します。
文法
int rtc_set_constant_period_interrupt_time(period);
パラメータ
period:
RTC_CONSTANT_PERIOD_TIME_NONE :周期なし
RTC_CONSTANT_PERIOD_TIME_HALFSECOND :0.5秒
RTC_CONSTANT_PERIOD_TIME_1SECOND :1秒(デフォルト)
RTC_CONSTANT_PERIOD_TIME_1MINUTE :1分
RTC_CONSTANT_PERIOD_TIME_1HOUR :1時間
RTC_CONSTANT_PERIOD_TIME_1DAY :1日
RTC_CONSTANT_PERIOD_TIME_1MONTH :1週間
戻り値
なし

rtc_constant_period_interrupt_on

概要
周期処理をONにします。
文法
rtc_constant_period_interrupt_on()
パラメータ
なし
戻り値
なし

rtc_constant_period_interrupt_off

概要
周期処理をOFFにします。
文法
rtc_constant_period_interrupt_off()
パラメータ
なし
戻り値
なし

サンプルプログラム

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


#include <Arduino.h>
#include <RLduino78_RTC.h>
 
void alarm_handler();
RTC_TIMETYPE t;

void setup()
{
  Serial.begin(9600);
  pinMode(24, OUTPUT); //blue led for alarm
  digitalWrite(24, HIGH); //turn off
  int err = rtc_init();

  t.year    = 13;
  t.mon     = 10;
  t.day     = 12;
  t.weekday = RTC_WEEK_THURSDAY;
  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(2000 + 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(24, LOW);//blue led for alarm

}


1秒ごとにLEDをチカっとするサンプルです。


#include <Arduino.h>
#include <RLduino78_RTC.h>

#define LED_GREEN 23

void rtcInterrupt1s(){
	digitalWrite(LED_GREEN, LOW);
	delay(10);
	digitalWrite(LED_GREEN, HIGH);
}

void setup(){
	digitalWrite(LED_GREEN, HIGH);
	pinMode(LED_GREEN, OUTPUT);

	rtc_init();
	rtc_attach_constant_period_interrupt_handler(rtcInterrupt1s);
	rtc_set_constant_period_interrupt_time(RTC_CONSTANT_PERIOD_TIME_1SECOND);
	rtc_constant_period_interrupt_on();

}

void loop(){

}