Arduino UNO R4(WiFi)のMCU(マイクロコントローラ)RA4M1は、RTC(Real Time Clock)を内蔵しています。
このRTCの使い方を勉強します。参考にしたのは、ArduinoチュートリアルのRTCのページと「作りながら学ぶArduin+=電子工作入門」というサイトです。
とりあえず、現在の時刻をRTCに書き込んで、I2C LCD1602に時刻を表示してみることにします。
I2C LCD1602の接続は、前の記事と同じです。回路図です。
スケッチです。
--------------------------------------------------
#include "RTC.h"
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
String lcdData;
void setup() {
//Serial.begin(9600);
lcd.begin(16,2);
lcd.init();
lcd.backlight();
lcd.print("DATE");
lcd.setCursor(0,1);
lcd.print("TIME");
RTC.begin();
RTCTime startTime(20, Month::FEBRUARY, 2024, 20, 40, 00, DayOfWeek::TUESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}
void loop() {
RTCTime currentTime;
// Get current time from RTC
RTC.getTime(currentTime);
lcdData = String(currentTime.getYear()) + "/";
uint8_t Mon = Month2int(currentTime.getMonth());
if( Mon < 10){lcdData = lcdData + "0";}
lcdData = lcdData + String(Mon) + "/";
uint8_t Day = currentTime.getDayOfMonth();
if( Day <10 ){lcdData = lcdData + "0";}
lcdData = lcdData + String(Day);
lcd.setCursor(6,0);
lcd.print(lcdData);
uint8_t Hor = currentTime.getHour();
if( Hor < 10){lcdData = "0";}
lcdData = String(Hor)+":";
uint8_t Min = currentTime.getMinutes();
if( Min < 10){lcdData = lcdData +"0";}
lcdData = lcdData + String(Min)+":";
uint8_t Sec = currentTime.getSeconds();
if( Sec < 10){lcdData = lcdData +"0";}
lcdData = lcdData + String(Sec);
lcd.setCursor(6,1);
lcd.print(lcdData);
delay(1000);
}
--------------------------------------------------
月、日、時間、分、秒の値が1桁の場合は、数字の前に0を入れて、年以外の数値はすべて2桁表示するようにしました。
RTCを表示させた様子です。1秒ごとに時刻が表示されます。
次回は、ネットに接続して時刻を取得するようにしてみます。