メインコンテンツに移動

時計(RTC)

時計(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(){
        }