brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Sep 21. 2020

33. 디지털시계  만들기#2:RTC, LED 이용

DS1302와 TM1637 이용

이제 TM1637(4자리 7 segment LED 디스플레이)을 추가하여 실제 디지털시계와 흡사한 작품을 완성하여 보자.


32편에서 만들었던 회로에 LED 패널을 추가하려면, 앞서 사용한 것처럼 핀 4개를 아두이노와 연결하여야 한다.

VCC-5V

GND-GND

CLK- pin2

DIO-pin3


이렇게 연결을 추가하여 본 사진은 아래와 같다.

시간과 분이 콜론(:) 좌우로 보이고 중간의 콜론 표시는 1초를 주기로 반짝거리게 된다.

화면과 같이 시간을 표시하는 코드를 앞의 코드에 추가해 보자.


추가된 내용만 설명해 보면...

Line 1의 #include <TM1637 Display.h>는 TM1637을 이용하기 위한 라이브러리로 앞선 강좌에서 이미 설치한 것이다.


Line 5~7도 이미 설명한 내용이다. CLK와 DIO를 연결할 핀을 정의한 것이다.

아래의 const int와 #define으로 정의된 내용을 비교해 보시라.


Line 15~26과 같이 요일에 관련된 모든 사항은 LED 표시와는 상관없지만, Serial Monitor에서 보여주기 위한 코드라고 생각하시면 된다.


Line 37의 displayData(t.hr, t.min, t.sec); 은 새로 정의된 displayData 함수를 부르는 부분이다.

이때 디지털시계에서 꼭 필요한 시간, 분, 초 이렇게 세 가지 데이터만을 전달한다.


Line 41~48까지의 displayData는 TM1637 LED에 시간을 표시하는 함수이다.


void displayData(int h, int m, int s)

 {

     int data=h*100+m;     

     // 가운데 콜론 사용

     display.showNumberDecEx(data, (s%2? 0x00:0x40), true); 

 }

시간에 100을 곱하여 자릿수를 좌측 2자리로 옮기고 여기에 분을 추가하여 4자리 시각을 표시하는 부분은 지금까지 따라온 독자라면 아마 이해하실 것이다.


여기서 콜론을 표시하기 위한 아주 간단한 노력 하나가 있다.

C 프로그램뿐 아니라 많은 프로그래밍 언어에서 

s%2?0x00:0x40와 같은 형식으로 참 또는 거짓의 경우를 따지는 명령을 정의할 수 있는데,

위의 경우 s를 2로 나누어 그 나머지가 1이면 0x00, 0이면 0x40을 반환하라는 명령이다.

C 언어에서는 1은 true, 0은 false로 사용되기도 하는데, 이를 기반으로 이렇게 간단한 명령을 넣을 수 있다.

어찌 되었건 display.showNumberDecEx의 두 번째 파라미터가 0x40일 경우 콜론이 보이고, 0x00일 경우 콜론이 보이지 않게 되므로 반짝거리는 결과를 나타낼 수 있다.


Line 56~59까지의 코드는 앞 서 말한 것과 같이 시간을 다시 세팅하는 명령이므로 시간이 이미 맞춰진 이후에는 코멘트 처리하여 원하지 않는 시간으로 세팅되는 것을 막아야 한다.








매거진의 이전글 32. 디지털시계  만들기#1:RTC, LED 이용
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari