아두이노 우노 R4 Minima와 Wifi 보드에 있는 RTC(Real Time Clock)은 기능은 정확히 같다.
단지 다른 점이 두 가지 있는데
1. Minima는 RTC에 외부에서 전원을 공급하는 배터리 커넥터가 WiFi 보드에는 있고, Minima 보드에는 존재하지 않는다.
2. WIFI 보드에서는 인터넷이 되니 네트워크 시간 프로토콜(NTP)을 사용해 현재 시간을 가져올 수 있지만 Minima 에서는 방법이 없다는 점이다.
그리하여 똑같은 문서를 중복 저장하여 싣는 것이 의미가 없다는 생각이 갑자기 들지만 그래도 혹시 참고할 만한 내용이라 위에 설명한 내용은 쏙 빼고 자료를 올린다. 우노 R4 WiFi 보드의 RTC 기능은 문서를 참고한다.
아두이노 우노 R4 Minima RTC, Real-Time Clock

UNO R4 미니마에서 실시간 시계(RTC)에 액세스하는 방법을 알아보세요.
이 튜토리얼에서는 아두이노 UNO R4 미니마 보드에서 실시간 클록(RTC)에 액세스하는 방법을 배웁니다. RTC는 UNO R4 Minima의 마이크로컨트롤러(RA4M1)에 내장되어 있습니다.
목표
이 프로젝트의 목표는 다음과 같습니다:
- RTC의 시작 날짜 설정
- 달력 형식의 RTC에서 날짜/시간에 액세스합니다.
- 유닉스 형식으로 시간에 액세스합니다.
필요한 하드웨어 및 소프트웨어
- 아두이노 IDE(온라인 또는 오프라인)
- Arduino R4 Minima
- 아두이노 르네사스 코어
실시간 시계(RTC)
UNO R4 WiFi의 RTC는 Renesas 코어에 포함된 RTC 라이브러리를 사용하여 액세스할 수 있습니다. 이 라이브러리를 사용하면 시간을 설정하거나 가져올 수 있을 뿐만 아니라 알람을 사용하여 인터럽트를 트리거할 수 있습니다.
이 페이지에 제공된 예제는 RTC를 사용하는 많은 실용적인 예제가 있으며, 이를 시작하는 데 도움이 될 것입니다.
시간 설정
- RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, 요일::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE)
- RTC.setTime(startTime)
RTC의 시작 시간을 설정하려면 RTCTime 객체를 생성하면 됩니다. 여기서 일, 월, 연, 시, 분, 초를 지정하고 요일과 일광 절약 모드를 지정할 수 있습니다.
그런 다음 시간을 설정하려면 setTime() 메서드를 사용합니다. 예제 코드가 아래에 있어요.
#include "RTC.h"
void setup() {
Serial.begin(9600);
RTC.begin();
RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}
void loop(){
}
시간 가져오기
- RTC.getTime(currentTime)
시간을 검색하려면 RTCTime 객체를 생성하고 getTime() 메서드를 사용하여 현재 시간을 검색해야 합니다.
이 예제에서는 시간을 설정 및 가져와서 currentTime이라는 RTCTime 객체에 저장합니다.
#include "RTC.h"
void setup() {
Serial.begin(9600);
RTC.begin();
RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}
void loop(){
RTCTime currentTime;
// Get current time from RTC
RTC.getTime(currentTime);
}
날짜 및 시간 인쇄
위의 예제는 시간을 설정하고 가져와 객체에 저장하는 방법을 보여줍니다. 이 데이터는 일련의 메서드를 통해 검색할 수 있습니다:
- getDayOfMonth()
- getMonth()
- getYear()
- getHour()
- getMinutes()
- getSeconds()
아래 예제는 currentTime 객체에서 날짜와 시간을 출력합니다.
#include "RTC.h"
void setup() {
Serial.begin(9600);
RTC.begin();
RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}
void loop() {
RTCTime currentTime;
// Get current time from RTC
RTC.getTime(currentTime);
// Print out date (DD/MM//YYYY)
Serial.print(currentTime.getDayOfMonth());
Serial.print("/");
Serial.print(Month2int(currentTime.getMonth()));
Serial.print("/");
Serial.print(currentTime.getYear());
Serial.print(" - ");
// Print time (HH/MM/SS)
Serial.print(currentTime.getHour());
Serial.print(":");
Serial.print(currentTime.getMinutes());
Serial.print(":");
Serial.println(currentTime.getSeconds());
delay(1000);
}
유닉스
- currentTime.getUnixTime()
유닉스 타임스탬프를 검색하려면 getUnixTime() 메서드를 사용합니다.
#include "RTC.h"
void setup() {
Serial.begin(9600);
RTC.begin();
RTCTime startTime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(startTime);
}
void loop() {
RTCTime currentTime;
// Get current time from RTC
RTC.getTime(currentTime);
//Unix timestamp
Serial.print("Unix timestamp: ");
Serial.println(currentTime.getUnixTime());
delay(1000);
}
주기적 인터럽트
주기적 인터럽트를 사용하면 반복 콜백을 설정할 수 있습니다.
이를 사용하려면 setPeriodicCallback() 메서드를 사용하여 주기적 콜백을 초기화해야 합니다:
- RTC.setPeriodicCallback(periodic_cbk, Period::ONCE_EVERY_2_SEC)
또한 호출할 함수를 생성해야 합니다:
- void periodicCallback() { 실행할 코드 }
IRQ는 실행 시간이 매우 빠르다는 점에 유의하세요. 많은 코드를 배치하는 것은 좋은 방법이 아니므로 아래 예제에서는 단일 플래그인 irqFlag만 전환합니다.
아래 예시는 2초마다 불빛을 깜빡입니다:
#include "RTC.h"
volatile bool irqFlag = false;
volatile bool ledState = false;
const int led = LED_BUILTIN;
void setup() {
pinMode(led, OUTPUT);
Serial.begin(9600);
// Initialize the RTC
RTC.begin();
// RTC.setTime() must be called for RTC.setPeriodicCallback to work, but it doesn't matter
// what date and time it's set to
RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);
RTC.setTime(mytime);
if (!RTC.setPeriodicCallback(periodicCallback, Period::ONCE_EVERY_2_SEC)) {
Serial.println("ERROR: periodic callback not set");
}
}
void loop(){
if(irqFlag){
Serial.println("Timed CallBack");
ledState = !ledState;
digitalWrite(LED_BUILTIN, ledState);
irqFlag = false;
}
}
void periodicCallback()
{
irqFlag = true;
}
주기는 다음 열거형을 사용하여 지정할 수 있습니다:
- ONCE_EVERY_2_SEC
- ONCE_EVERY_1_SEC
- N2_TIMES_EVER_SEC
- N4_TIMES_EVER_SEC
- N8_TIMES_EVER_SEC
- N16_TIMES_EVER_SEC
- N32_TIMES_EVER_SEC
- N64_TIMES_EVER_SEC
- N128_TIMES_EVER_SEC
- N256_TIMES_EVER_SEC
알람 콜백
- RTC.setAlarmCallback(alarm_cbk, alarmtime, am)
#include "RTC.h"
void setup() {
Serial.begin(9600);
RTC.begin();
RTCTime alarmtime;
alarmtime.setSecond(35);
AlarmMatch am;
am.addMatchSecond();
if (!RTC.setAlarmCallback(alarm_cbk, alarmtime, am)) {
Serial.println("ERROR: alarm callback not set");
}
}
void alarm_cbk() {
Serial.println("ALARM INTERRUPT");
}
요약
이 튜토리얼은 시작 시간 설정, 알람 설정, 달력 또는 유닉스 형식의 시간 가져오기 등 UNO R4 WiFi에서 RTC를 사용하는 방법을 보여줍니다.
'아두이노우노 R4' 카테고리의 다른 글
| Arduino UNO R4의 FspTimer 라이브러리 사용법 (1) | 2024.03.26 |
|---|---|
| UNO R4 WiFi 네트워크 예제 (1) | 2024.03.20 |
| 우노 R4 WiFi 자동 완성 키보드로 사용하기 (1) | 2024.03.20 |
| 아두이노 우노 R4 WiFi CAN Bus 꿀팁 (1) | 2024.03.18 |
| 아두이노 우노 R4 Minima USB HID (0) | 2024.03.15 |
| 아두이노 우노 R4 Minima 핵 꿀팁 Cheat Sheet (2) | 2024.03.14 |
| 아두이노 우노 R4 Minima 모든 꿀팁 (1) | 2024.03.13 |
| uno r4 키보드 기능 안 될 때 시도해볼 것 (0) | 2024.03.09 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩