【 아두이노모듈#7】 TM1637 (100초) 시계 만들기 #1
【 아두이노모듈#7】 TM1637 (100초) 시계 만들기 #1
지난시간 TM1637 FND (4 Digit Display) 모듈의 함수들을 이용해서 다양하게 컨트롤 해보았다. 이제 활용도가 높은 시계를 만들어보려 한다.
우선, 프로그래밍 연습겸 , 조금 쉽게 접근하기 위해서 100초까지 카운트 되어 넘어가는 100초 시계부터 만들어 보도록 하자. (TM1637Display.h 사용)
▶ 선수 학습 :
1. (모듈#4) TM1637 4Digit Display #1 (TM1637 기본 참고) ☜ 강좌클릭
2. (모듈#5) TM1637 Data shift 하기#2 (숫자 출력 참고) ☜ 강좌클릭
3. (모듈#6) TM1637 4Digit 마스터하기#3 (모듈함수사용 참고) ☜ 강좌클릭
▶ TM1637 세부 스팩
※ TM1637 모듈은, CATALEX 사, Grove 사, 두 회사제품이 판매되고 있고, 두 제품 상호간 라이브러리 코드 내용이 조금 다르기 때문에, 코드를 컴파일 할 때, 프로그램 내용에 따라 에러가 날 수 있다. 이때는 해당 제품에 사용되지 않는 명령어(함수)를 찾아 내어 수정하면 된다. (여기서는 CATALEX 사 제품을 이용하였다)
▶ 실습 목표 :
1. [ 아두이노의 현재시간값 함수를 사용해 볼 수 있다 ]
2. [ 시간데이터값에서, 초 2자리, 분 2자리 등의 데이터를 추출해서 FND모듈의 각 자리에 출력 해 볼 수 있다. ]
3. [ 시계표시를 위한 '도트'를 컨트롤 할 수 있다.]
▶ 실습 회로도면 :
(이미지 클릭하면 확대 가능)
▶ 실습 절차 :
(여기서는 'TM1637Display.h' 사용)
아두이노 IDE 에러메세지 창에서 사용하고 있지 않은 헤더 파일을 직접 삭제 하면 문제는 해결 된다.)
※ 라이브러리 다운로드 방법 :
▶ 프로그램 코드 및 설명 :
/* TM1637Display .h 라이브러리 완벽마스터하기 */
/* 100초 시계 구현 하기 (알고리즘 공부) */
#include <Arduino.h>
#include <TM1637Display.h>
#define CLK 8
#define DIO 9
TM1637Display display(CLK, DIO);
int Sec1, Sec2, Min1, Min2, Tm1, Tm2 = 0;
unsigned long previousTime, currentTime;
uint8_t data[] = { 0x0, 0x0, 0x0, 0x0 }; // 초기값 00:00 셋팅
uint8_t segto;
void setup ( ) {
previousTime = millis(); // 현재의 시간을 입력 받음
display.setBrightness(0xF); // 최대 밝기 (1~7 밝기 조절)
Serial.begin(9600);
}
void loop ( ) {
currentTime = millis()/1000; // 최하 단위를 초로 바꾸어 줌
Sec2 = currentTime%10; // 현재시간값에서 초단위 '일의 자리'만 저장
Sec1 = (currentTime/10)%10; // 현재시간값에서 초단위 '십의 자리'만 저장
Min2 = (currentTime/100)%10;// 현재시간값에서 분단위 '일의 자리'만 저장
Min1 = (currentTime/1000)%10;//현재시간값에서 분단위 '십의 자리'만저장
data[0]=display.encodeDigit(Min1); // FND의 분단위 십의 자리
data[1]=display.encodeDigit(Min2); // FND의 분단위 일의 자리
data[2]=display.encodeDigit(Sec1); // FND의 초단위 십의 자리
data[3]=display.encodeDigit(Sec2); // FND의 초단위 일의 자리
segto = 0x80 | display.encodeDigit(Min2); // 초시계용 ':'도트
display.setSegments(data);
display.setSegments(&segto,1,1);
delay(500);
display.setSegments(data); //도트가 깜빡이게 하기 위해 반복 출력
delay(500);
}
▶ 참고 자료 :
(전체화면 보기로 보세요)
▶ 아두이노 파일다운 :
(다운받아서 압축을 풀어 사용하세요)