아두이노 시계 모듈을 사용하여 현재 시간을 시리얼 모니터에 출력하는 코드
DS1307 RTC 모듈을 사용, Wire 라이브러리가 필요
아두이노 시계 모듈은 내부적으로 RTC(Real-Time Clock)를 사용하여 시간을 유지합니다.
이 RTC는 별도의 배터리로 백업되므로 아두이노가 전원이 꺼져도 시간 정보가 유지됩니다.
따라서 아두이노 시계 모듈을 업로드한 이후에도 RTC에 저장된 시간 정보는 계속 유지됩니다.
다만, RTC의 정확성은 일정한 정도의 오차가 발생할 수 있으므로 일정한 주기로 RTC를 보정해주는 것이 좋습니다.
이를 위해 NTP(Network Time Protocol)와 같은 인터넷 기반 시간 동기화 기술을 사용할 수 있습니다.
// CONNECTIONS:
// DS1302 CLK/SCLK --> 5
// DS1302 DAT/IO --> 4
// DS1302 RST/CE --> 2
// DS1302 VCC --> 3.3v - 5v
// DS1302 GND --> GND
위 코드에서는 setup() 함수에서 Wire 라이브러리와 RTC_DS1307 라이브러리를 사용하기 위해 include를 해주고, Serial 통신을 시작합니다. rtc.begin() 함수를 사용하여 RTC 모듈을 초기화하고, isrunning() 함수를 사용하여 RTC가 실행 중인지 확인합니다. RTC가 실행 중이지 않은 경우, adjust() 함수를 사용하여 현재 시간을 RTC에 설정합니다.
loop() 함수에서는 rtc.now() 함수를 사용하여 현재 시간을 가져와서 Serial 통신으로 출력합니다. 출력 된 시간은 연도, 월, 일, 시간, 분, 초 형식으로 표시되며, delay() 함수를 사용하여 1초마다 시간이 업데이트 되도록 설정됩니다.
아래 코드 복사 업로드
==========================================================
#include <ThreeWire.h>
#include <RtcDS1302.h>
ThreeWire myWire(4,5,3); // IO, SCLK, CE 디지털 연결 번호
RtcDS1302<ThreeWire> Rtc(myWire);
void setup () {
Serial.begin(9600);
Rtc.Begin();
RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
printDateTime(compiled);
Serial.println();
RtcDateTime now = Rtc.GetDateTime();
}
void loop () {
RtcDateTime now = Rtc.GetDateTime();
printDateTime(now); // 현재시간 함수 호출
Serial.println();
}
// 시계 모듈 년도, 달, 시간, 분, 초 받아오는 함수
#define countof(a) (sizeof(a) / sizeof(a[0]))
void printDateTime(const RtcDateTime& dt){
char datestring[20];
snprintf_P(datestring,
countof(datestring),
PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
dt.Month(),
dt.Day(),
dt.Year(),
dt.Hour(),
dt.Minute(),
dt.Second() );
Serial.print(datestring);
}
==========================================================
'스마트팜 with 아두이노 > 시계모듈 활용' 카테고리의 다른 글
시계모듈 활용 시간으로 led 제어 (0) | 2023.04.03 |
---|