JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

Arduino UNO R4 WiFi RTC その1

2024-02-20 20:45:47 | お知らせ
 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秒ごとに時刻が表示されます。

 次回は、ネットに接続して時刻を取得するようにしてみます。