DS1302
DS1302 모듈은 실제 시간을 기록해 두었다가 필요시 읽을 수 있도록 해 줍니다.
일반적으로 DS1302 칩 옆에는 항상 배터리가 있는 것을 볼 수 있습니다.
이 배터리는 DS1302 칩이 시간을 계속 카운트 할 수 있도록 전원을 공급해주는 역할을 합니다.
배터리의 수명이 끝났거나 배터리가 모듈에서 분리되는 경우 DS1302 칩에 기록된 시간은 초기화(리셋)되어 버리니 주의 해야 합니다.
그러면, DS1302 모듈에 시간을 기록하고 꺼내보는 작업을 해 보겠습니다.
라이브러리 설치
DS1302 모듈을 쉽게 제어하기 위한 라이브러리를 추가합니다. (이미 설치된 경우 건너뜁니다.)
- https://github.com/msparks/arduino-ds1302에 접속하여 라이브러리 zip 파일을 다운로드 합니다.
- arduino-ds1302-master.zip 라이브러리 파일을 아두이노에 추가합니다.
아두이노 > 스케치 > 라이브러리 포함하기 > .ZIP 라이브러리 추가…
DS1302 작동 테스트
- 아래와 같이 DS1302 모듈을 연결합니다.
- 아두이노 프로그램에 아래 소스를 입력합니다.
#include <stdio.h> #include <DS1302.h> namespace { // DS1302와 연결되는 아두이노 핀 번호 const int kCePin = 8; // Chip Enable const int kIoPin = 7; // Input/Output const int kSclkPin = 6; // Serial Clock // DS1302 오브젝트 생성 DS1302 rtc(kCePin, kIoPin, kSclkPin); // 요일 코드에 알맞는 문자열 출력 String dayAsString(const Time::Day day) { switch (day) { case Time::kSunday: return "Sunday"; case Time::kMonday: return "Monday"; case Time::kTuesday: return "Tuesday"; case Time::kWednesday: return "Wednesday"; case Time::kThursday: return "Thursday"; case Time::kFriday: return "Friday"; case Time::kSaturday: return "Saturday"; } return "(unknown day)"; } // 날짜, 시간 출력 함수 void printTime() { // 칩에 저장된 시간을 읽어옵니다. Time t = rtc.time(); // 요일 코드에 알맞는 문자열 가져오기 const String day = dayAsString(t.day); // 날짜와 시간 정보를 임시 버퍼에 형식에 맞추어 담아둡니다. char buf[50]; snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d", day.c_str(), t.yr, t.mon, t.date, t.hr, t.min, t.sec); // 임시 버퍼의 내용을 출력합니다. Serial.println(buf); } } // namespace void setup() { Serial.begin(9600); // 새로운 날짜와 시간 정보를 칩에 저장합니다. // 이 작업은 시간을 맞출때만 사용하며, 평상시에는 주석(//) 처리되어 있어야 합니다. // rtc.writeProtect(false); // rtc.halt(false); // Time t(2017, 6, 17, 14, 49, 00, Time::kSaturday); // rtc.time(t); } // 1초마다 날짜와 시간을 출력합니다. void loop() { printTime(); delay(1000); }
- 소스 파일을 아두이노에 업로드 한 다음 시리얼 모니터를 열어보면, 현재 날짜와 시각이 출력되는 것을 볼 수 있습니다.
현재 시각이 맞지 않는 경우
- 아래와 같이 소스 파일 54 ~ 57 라인의 주석(//)을 해제하고, 현재 시각을 입력합니다.
// 새로운 날짜와 시간 정보를 칩에 저장합니다. // 이 작업은 시간을 맞출때만 사용하며, 평상시에는 주석(//) 처리되어 있어야 합니다. rtc.writeProtect(false); rtc.halt(false); Time t(2017, 6, 17, 14, 49, 00, Time::kSaturday); rtc.time(t);
(년, 월, 일, 시, 분, 초, 요일)
요일은 다음 중 하나를 입력합니다.
Time::kSunday
Time::kMonday
Time::kTuesday
Time::kWednesday
Time::kThursday
Time::kFriday
Time::kSaturday - 시리얼 모니터를 열어서 시각이 제대로 세팅되었는지 확인합니다.
- 아래와 같이 소스 파일 54 ~ 57 라인을 주석(//) 처리하고 다시 한번 업로드 합니다. (무한 세팅 방지)
// 새로운 날짜와 시간 정보를 칩에 저장합니다. // 이 작업은 시간을 맞출때만 사용하며, 평상시에는 주석(//) 처리되어 있어야 합니다. // rtc.writeProtect(false); // rtc.halt(false); // Time t(2017, 6, 17, 14, 49, 00, Time::kSaturday); // rtc.time(t);
목차
- 아두이노 고급키트 무작정 따라하기
- 아두이노 8×8 LED Matrix
- 아두이노 Remote Control Test
- 아두이노 Stepper Speed Control
- 아두이노 RFID Reading Test
- 아두이노 LCD Test
- 아두이노 DHT11 온습도 센서 테스트
- 아두이노 3-Color LED Test
- 아두이노 4×4 Keypad Test
- 아두이노 DS1302 Realtime Clock Test
- 아두이노 시계
- 아두이노 초음파 센서 HC-SR04
- 아두이노 초음파 거리측정기
- 아두이노 LCD Test (I2C 모듈 사용)
- 아두이노 초음파 거리측정기 (I2C LCD 사용)
- 아두이노 LM35 온도계 (with Processing)
- 아두이노 미로게임 (MPU-6050 + 프로세싱)