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, 통합 모듈
'아두이노 기타모듈' 카테고리의 다른 글
[기타/로직레벨컨버터] 3.3V to 5V logic level converter를 이해하자 (0) | 2020.07.14 |
---|---|
[메모리/SD카드쉴드] Arduino에 저장장치가 필요한가요?SD Card Shield를 써보세요. (0) | 2015.11.01 |
[기타/케이스] Arduino UNO/Mega, 라즈베리파이 플라스틱 케이스를 씌워보자 (2) | 2015.10.14 |
[에디슨/USB드라이브] 에디슨의 USB drive(storage)를 자체에서 마운트해서 사용하기 (0) | 2015.09.12 |
[기타/레이저] 아두이노로 레이저를 쏴보자. TTL 레이저 모듈! (0) | 2015.06.22 |
[쉴드/종합] DFRobot blunoAccessory 쉴드로 OLED+DHT11+LED+Joystick 등을 종합 사용 (0) | 2015.06.03 |
[기타/RTC breakout] 실시간 시간을 알려주는 RTC breakout(DS1307 혹은 DS3231) (2) | 2015.04.18 |