【 아두이노모듈#9】 TM1637 (시:분) 시계 만들기 #3
지난시간 TM1637 FND (4 Digit Display) 모듈을 이용하여 분과 초를 나타내는 초시계를 만들어 보았다.
이번 시간에는 통상적으로 사용할 수 있는 시간과 분으로 된 시계를 만들어 보려 한다. 지난번 회로에서 코딩만 살짝 추가 하면 바로 구현 할 수 있다.
▶ 선수 학습 :
1. (모듈#4) TM1637 4Digit Display #1 (TM1637 기본 참고) ☜ 강좌클릭
2. (모듈#5) TM1637 Data shift 하기#2 (숫자 출력 참고) ☜ 강좌클릭
3. (모듈#6) TM1637 4Digit 마스터하기#3 (모듈함수사용 참고) ☜ 강좌클릭
4. (모듈#7) 100초 시계만들기#4 (시간 카운트 참고) ☜ 강좌클릭
5. (모듈#8) "분 : 초" 시계 만들기#5 (분과 초 60단위 코딩 참고) ☜ 강좌클릭
▶ TM1637 세부 스팩
※ TM1637 모듈은, CATALEX 사, Grove 사, 두 회사제품이 판매되고 있고, 두 제품 상호간 라이브러리 코드 내용이 조금 다르기 때문에, 코드를 컴파일 할 때, 프로그램 내용에 따라 에러가 날 수 있다. 이때는 해당 제품에 사용되지 않는 명령어(함수)를 찾아 내어 수정하면 된다. (여기서는 CATALEX 사 제품을 이용하였다)
▶ 실습 목표 :
1. [ 아두이노의 현재시간값 함수를 사용해 볼 수 있다 ]
2. [ 시간데이터값에서, 초 2자리, 분 2자리 등의 데이터를 추출해서 FND모듈의 각 자리에 출력 해 볼 수 있다. ]
3. [ 시계표시를 위한 '도트'를 컨트롤 할 수 있다.]
4. [ 시간값 24시간 단위, 분 60분, 초 60초 단위로 코딩할 수 있다]
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
▶ 실습 절차 :
(여기서는 'TM1637Display.h' 사용)
아두이노 IDE 에러메세지 창에서 사용하고 있지 않은 헤더 파일을 직접 삭제 하면 문제는 해결 된다.)
또한, 같은 이름의 <TM1637Display.h> 이라도, 실제 파일의 용량을 체크해 보면 용량이 다른 경우가 있을 수 있다. 그 이유는 파일 속에 명령어 등이 더 추가가 되거나 전반적인 명령어 내용이 아예 다를 수 있다. 따라서 둘 중 하나는 실행이 안 될 수 있다.
▶ 프로그램 코드 및 설명 :
/* 시:분 시계 만들기 코드입니다 */
/* 1분~ 60분, 1~24시간 단위로 넘어가는 시계 구현*/
/* 4Digit FND의 2자리에 분, 또다른 2자리에 시 배치 */
#include <TM1637Display.h>
#include <TimeLib.h>
#define CLK 8
#define DIO 9
int Sec1, Sec2, Min1, Min2, Tm1, Tm2 = 0;
unsigned long previousTime, currentTime;
TM1637Display display(CLK, DIO);
void setup() {
previousTime = millis(); // 현재의 시간을 입력 받음
display.setBrightness(0xF);
Serial.begin(9600);
}
void loop() {
currentTime = millis();
if (currentTime - previousTime > 1000) { // 1초 이상 경과 체크
previousTime = currentTime;
Sec2++; // ‘초단위’ 1의 자리 값을 1 증가
if(Sec2 == 10) { // 10초가 되면 초단위 10의 자리 증가
Sec2 = 0;
Sec1++;
}
}
if (Sec1 == 6 && Sec2 == 0) { //만약 증가시킬 Sec1이 ‘6’이고,
Sec1 = 0; // Sec2가 ‘0’이라면 , 초단위 변수들을 ‘0’
Sec2 = 0; // 으로 리셋 후, 분단위 일의 자리
Min2++; // 60초가 되었으므로 1분 증가
}
if(Min2 ==10) { // 9분에서 10분이 될 때의 처리
Min2 =0;
Min1++;
}
if (Min1 == 6 && Min2 ==0) { // 초단위와 마찬가지로 분단위 처리
Sec1 = 0;
Sec2 = 0;
Min1 = 0;
Min2 = 0;
Tm2++; // 60분이 되었으므로 1시간 증가
}
if (Tm2 == 10) { // 9시에서 10시가 될 때의 처리
Tm2 = 0;
Tm1++;
}
if (Tm1 == 2 && Tm2 ==4) { //24시간이 되면 모두 0시0분0초로 처리
Sec1 = 0;
Sec2 = 0;
Min1 = 0;
Min2 = 0;
Tm1 = 0;
Tm2 = 0;
}
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 }; // 초기값으로 00:00 셋팅
uint8_t segto;
/* 만약 분:초 시계로 변경하려면 아래 주석 4줄을 활성화 하세요 (시:분) 코드 4줄은 비활성 시키기
data[0]=display.encodeDigit(Min1);
data[1]=display.encodeDigit(Min2);
data[2]=display.encodeDigit(Sec1);
data[3]=display.encodeDigit(Sec2);
*/
// 아래 4줄은 시:분 시계용 코드 입니다.
data[0]=display.encodeDigit(Tm1);
data[1]=display.encodeDigit(Tm2);
data[2]=display.encodeDigit(Min1);
data[3]=display.encodeDigit(Min2);
// segto = 0x80 | display.encodeDigit(Min2); // 분:초 시계용 도트 :
segto = 0x80 | display.encodeDigit(Tm2); // 시:분 시계용 도트 :
display.setSegments(data);
display.setSegments(&segto,1,1); // 도트 ‘:’ 켜고
delay(500);
display.setSegments(data); // 깜빡이게 하기
delay(500);
}
▶ 참고 자료 :
(전체화면 보기로 보세요)
▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)
▶ 라이브러리 추가 하는 방법
① 라이브러리 추가 하려면, 위 파일을 다운로드 받고 압축을 풀어 아두이노 라이브러리 폴더에 폴더 그대로 복사해 넣거나, 폴더 위치는 보통 아두이노가 설치된 문서 폴더 아래에 있습니다. 예시) C:\문서\Arduino\libraries
② 압축을 풀지 않은 상태에서, 아두이노 IDE 메뉴 ≫ 스케치 ≫ 라이브러리 추가하기 ≫ .ZIP 라이브러리 추가 ≫ 메뉴에서 라이브러리 압축파일을 선택해 주면 추가됩니다.
'아두이노 > 3. 아두이노 모듈' 카테고리의 다른 글
【 아두이노모듈#9】 TM1637 & DS1307 리얼타임 시계 만들기 (25) | 2019.03.21 |
---|---|
【 아두이노모듈#8】 DS1307 (RTC) 리얼타임클럭 모듈 배우기 #1 (0) | 2019.03.15 |
【 아두이노모듈#8】 TM1637 (분:초) 시계 만들기 #2 (0) | 2019.03.11 |
【 아두이노모듈#7】 TM1637 (100초) 시계 만들기 #1 (0) | 2019.03.08 |
【 아두이노모듈#6】 TM1637 4Digit Display #3. 마스터하기 (4) | 2019.03.06 |