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

}