メインコンテンツに移動

時計(RTC)

時計(RTC)

時計として使うためのライブラリです。年、月、日、曜日、時、分、秒を設定後、時計として機能します。アラームを設定してアラーム発生時に特定の処理を行うこともできます。ライブラリを使用するには、#include <RTC.h>を記述して、RTC rtcのようにインスタンスを作成してください。

begin

概要

初期化を行います。

文法

bool rtc.begin()

パラメータ

なし

戻り値

true or false

end

概要

時計を停止します。

文法

bool rtc.end()

パラメータ

なし

戻り値

true or false

setDateTime

概要

時間を設定します。

文法

bool rtc.setDateTime(int year, int mon, int day, int hour, int min, int sec, int week)

パラメータ

year: Year
mon: Month
day: Day
hour: Hour
min: Minute
sec: Second
week: Use the following parameters:
  RTC_WEEK_SUNDAY
  RTC_WEEK_MONDAY
  RTC_WEEK_TUESDAY
  RTC_WEEK_WEDNESDAY
  RTC_WEEK_THURSDAY
  RTC_WEEK_FRIDAY
  RTC_WEEK_SATURDAY

戻り値

true or false

getDateTime

概要

時刻を取得します。

文法

bool rtc.getDateTime(int &year, int &mon, int &day, int &hour, int &min, int &sec, int &week)

パラメータ

setTimeと同様な変数

戻り値

true or false

attachAlarmHandler

概要

アラーム発生時に処理する関数を登録します。

文法

void rtc.attachAlarmHandler(void (*function)(void))

パラメータ

function: 処理する関数

戻り値

なし

setAlarmTime

概要

アラーム時間を設定します。

文法

bool rtc.setAlarmTime (int hour, int min, int week_flag)

パラメータ

hour: Hour
min: Minute
week_flag: Use the following week parameters:
  RTC_ALARM_SUNDAY
  RTC_ALARM_MONDAY
  RTC_ALARM_TUESDAY
  RTC_ALARM_WEDNESDAY
  RTC_ALARM_THURSDAY
  RTC_ALARM_FRIDAY
  RTC_ALARM_SATURDAY
  RTC_ALARM_EVERYDAY

戻り値

true or false

alarmOn

概要

アラームをONにします。

文法

rtc.alarmOn()

パラメータ

なし

戻り値

なし

alarmOff

概要

アラームをOFFにします。

文法

rtc.alarmOff()

パラメータ

なし

戻り値

なし


サンプルプログラム

時刻とアラームを設定するプログラムです。シリアル通信で時刻を出力し、10秒後にアラームでLEDが点灯します。


        #include <Arduino.h>
        #include <RTC.h>
         
        #define LED_ERROR 12
        #define LED_ALARM 13
        #define LED_ON HIGH
        #define LED_OFF LOW
         
        RTC rtc;
        void alarm_handler();
         
        void setup()
        {
          Serial.begin(9600);
          pinMode(LED_ALARM, OUTPUT); // LED for alarm
          pinMode(LED_ERROR, OUTPUT); // LED for error
          digitalWrite(LED_ALARM, LED_OFF); //turn off
          digitalWrite(LED_ERROR, LED_OFF); //turn off
           
          if(!rtc.begin()){
            digitalWrite(LED_ERROR, LED_ON); // error
          }  
          rtc.setDateTime(2016, 9, 22, 23, 20, 50, RTC_WEEK_SATURDAY);
           
          rtc.attachAlarmHandler(alarm_handler);
          rtc.setAlarmTime(23, 21, RTC_ALARM_EVERYDAY);
          rtc.alarmOn();
           
        }
           
        void loop()
        {
          int year, mon, day, hour, min, sec, week;
          rtc.getDateTime(year, mon, day, hour, min, sec, week);
           
          Serial.print(year, DEC);Serial.print("/");
          Serial.print(mon, DEC); Serial.print("/");
          Serial.print(day, DEC); Serial.print(" ");
          Serial.print(hour, DEC); Serial.print(":");
          Serial.print(min, DEC); Serial.print(":");
          Serial.println(sec, DEC);
           
          delay(500);
           
        }
           
        void alarm_handler()
        {
          digitalWrite(LED_ALARM, LED_ON); // 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(){
        }