본문 바로가기
아두이노 기타모듈

[복합/TM1638] TM1638 8 digits, 8 LEDs (7 segments), 8 keys 세트

by 작동미학 2015. 12. 13.
반응형

TM1638 칩을 사용한 복합 출력/입력 세트를 활용해보자

 

▶ 이 가이드를 따라하면

- 8자리 숫자와 8개의 LED (7 segments), 8개의 스위치(키)를 입력 받는 모듈을 제어 활용할 수 있다.

 

▶ 먼저 읽으면 좋은 글

- Arduino 일반 : http://bbangpan.tistory.com/1

- TM1637 4 digits 모듈 : http://bbangpan.tistory.com/31

 

▶ 부품 설명 및 회로 구성

일전에 4 digits 모듈을 소개한 적이 있다. 이 녀석은 8자리까지 표현이 가능하면서, 별도로 8개의 LED와 8개의 스위치까지 갖고 있다. TM1638 칩 기반으로 이 모든 것을 제어한다. 그것도 5개의 핀만으로 가능하다. 사진부터 보자. 이 녀석말고, 스위치가 더 많이 달린 모델이라던가, 핀 연결이 커넥터 형으로 된 다양한 버전이 존재하나, 유사하게 제어된다. 여기서 소개할 녀석은 그러나 아래와 같다. 출력 방법은 7 세그먼트라고 해서 8자 모양의 영숫자를 표시한다. (이 8자 모양의 각 LED 점등을 통해 F처럼 문자도 일부 출력이 가능하다)

 

<TM1638 8 digits 8 LEDs 8 keys모듈>

배선도 간단해서 VCC->5V, GND->GND, STB/CLS/DIO는 digital pin과 연결한 후 소스 코드에 명기해주면 된다. 여기서는 DIO->D8, CLK->D9, STB->D7 로 연결했다.

< VCC->5V, GND->GND, DIO->D8, CLK->D9, STB->D7 에 연결>

이런 류들은 또 8 digits밑에 작은 점까지 지원된다는 점이 보너스이다. 이것을 이용해 아래처럼 약간의 애니메이션 효과도 줄 수 있다. Arduino 디스플레이로는 128*86 OLED도 많이 사용되지만, 멀리서 잘 보이도록 하는 디스플레이 중에는 이런 계열이 가장 저렴하고 스위치가 달려 있어서 여러가지 활용이 가능하다.


▶ 소스 코드 입력 및 구동

먼저 여기 소스 코드는 https://grenville.wordpress.com/2012/06/02/an-led-display-with-pushbuttons-for-arduino-io/ 를 참조하여 변형하였다.

라이브러리가 없어도 제어하는 방법이 있긴 한데, 번잡해서 아래 라이브러리를 사용하는게 편하고, 받아서 libraries폴더에 복사한 후 sketch를 재실행하자.

https://github.com/rjbatista/tm1638-library

변형된 소스는 아래와 같다.

Github : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_tm1638/neibc_tm1638.ino

 

/* Redistributed by www.bbangpan.com

Program Description: TMP1638 8 digits/LEDs module

Needed library : TMP1538 https://github.com/rjbatista/tm1638-library

DataPin : DIO->D8, CLK->D9, STB->D7

Tested on : Arduino 1.7.4, Arduino UNO R3

 

Inspired by https://grenville.wordpress.com/2012/06/02/an-led-display-with-pushbuttons-for-arduino-io/

 

Copyright (c) 2015 www.bbangpan.com. All rights reserved.

This program can be used for any non-commercial purpose freely.

 

Original comments--------------------------------------------------------

Copyright (C) 2011 Ricardo Batista <rjbatista at gmail dot com>

This program is free software: you can redistribute it and/or modify

it under the terms of the version 3 GNU General Public License as

published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program. If not, see <http://www.gnu.org/licenses/>.

https://grenville.wordpress.com/2012/06/02/an-led-display-with-pushbuttons-for-arduino-io/

*/

 

#include <TM1638.h>

 

// DIO->D8, CLK->D9, STB->D7

TM1638 module(8, 9, 7);

 

byte dots = 1;

// Initial value for couting

long value = 300;

int incstep = 1;

 

void setup() {

Serial.begin(9600);

module.setDisplayToDecNumber(value, 0xFF); // 0xFF for enabling all dots

 

delay(3000);

}

 

void loop() {

byte keys = module.getButtons(); // 1 for S1, 2 for S2, 4 for S4, ....(2 bits)

Serial.println(dots);

module.setDisplayToDecNumber(value, dots, true);

Serial.println(keys);

module.setLEDs(keys); // 1 for LED1, 2 for LED2, 4 for LED3, 8 for LED4, 16 for LED05.. (2 bits)

 

if(keys == 1) {

leftdirled();

} else if(keys == 2) {

rightdirled();

} else if(keys == 4) {

incstep = -1;

} else if(keys == 8) {

incstep = 0;

} else if(keys == 16) {

incstep = 1;

}

delay(50);

 

dots = (dots * 2);

if (dots == 0) {

dots = 1;

}

 

value = (value + incstep );

 

if(value > 99999999) {

value=0;

} else if(value < 0) {

value=99999999;

}

 

}

 

void leftdirled() {

byte tmp;

 

for(tmp = 1; tmp=tmp*2; tmp<=128) {

module.setLEDs(tmp);

delay(100);

}

}

 

void rightdirled() {

byte tmp;

 

for(tmp = 128; tmp=tmp/2; tmp>=1) {

module.setLEDs(tmp);

delay(100);

}

}

 

간단히 사용 설명을 해보면, 시작하자마자 300부터 숫자를 세기 시작하며, S1~S8까지 누르면 해당 LED에도 불이 들어오고, 아래와 같은 부가 기능을 가지고 있다

S1 : 왼쪽에서 오른쪽으로 LED 애니메이션 시행

S2 : 오른쪽에서 왼쪽으로 LED 애니메이션 시행

S3 : 증가 값을 -1로 하여 숫자가 줄어듦

S4 : 증가 값을 0으로 하여 숫자 증가가 멈춤

S5 : 증가 값을 1로 하여 숫자가 다시 증가하도록 함

 

TM1638 라이브러리는 16진수로도 digit을 표기할 수 있으므로, 다양한 효과가 필요한 분들은 해당 라이브러리안의 함수를 좀더 자세히 살펴보기 바란다.

나머지 dots에 대한 제어나 LEDs에 대한 제어는 상기 소스만으로 충분히 파악 가능하다

(1,2,4,8,16..형태의 값을 던져주거나 받아 각 위치의 LED를 켜거나, 스위치 입력을 검사해서 알려준다.)

 

▶ 구매 가이드

TM1638 : http://www.aliexpress.com/wholesale?catId=0&initiative_id=SB_20151213054127&SearchText=TM1638 ($ 3)

 

강의 키워드

TM1638 8 digits 8 LEDs 8 keys, TM1638 8자리 숫자 8개 LED 8개 스위치, Arduino, 아두이노, 숫자 표기 LED, 통합 모듈

 

반응형