이 번에는 TM1637 7Segment FND Display 모듈을 Test 해 봤습니다.
워낙 Arduino 에서 제공하는 라이브러리가 잘 되어 있어 별도의 My 라이브러리를
만들 필요가 없습니다.
함수 사용법만 공부하시면 편하게 사용하실 수 있습니다.
TM1637은 7Segment FND전용 IC 칩 으로 많은 기능이 있으며 FND 표시에 대한 거의 모든 기능이 들어있는
칩 입니다. 사용해 보시면 너무 편합니다. GPIO Pin 수도 줄고요... 앞으로 74HC595 모듈하고 TM1637 모듈을
주로 사용하겠습니다. 여러분들도 프로젝트에 사용해 보시기 바랍니다.
단 구매시 주의할 점은 시계용 쿨롬이 표시된 FND 모듈은 구매하시 마세요...
DP 단자가 표시 안 됩니다. 그대신 시계처럼 분하고 초가 구별되는 쿨롬만 표시 됩니다.
#include <TM1637Display.h>
#define CLK 2
#define DIO 3
uint8_t data[]={0xff,0xff,0xff,0xff}; // 전부 켜짐 = 8자표시
// PLAY 표시하기
byte En_Font[] = {0x73, 0x38, 0x77, 0x6e}; // PLAY
byte twelve[] = {0x06, 0x5b}; //12
byte hex[4];
// Arduino 영문폰트
//byte Arduino[] {0x77, 0x50, 0x5e, 0x1c, 0x04, 0x54, 0x5c};
// 실습 4 = // Arduino 영문자 스크룰 표시하기
byte Arduino[] {
0x00, 0x00, 0x00, 0x77,
0x50, 0x5e, 0x1c, 0x04, 0x54, 0x5c,
0x00, 0x00, 0x00, 0x00
};
// Create the °C Symbol
const uint8_t Celsius[] = {
SEG_A | SEG_B | SEG_F | SEG_G, // Circle
SEG_A | SEG_D | SEG_E | SEG_F // C
};
//FND간 전환 시간 간격을 설정한다.
//bitDelay=100 = 기본 100us로 설정되어 있음
TM1637Display seg7(CLK, DIO); //bitDelay=100 ==> 생략가능(옵션)
void setup() {
// put your setup code here, to run once:
seg7.setBrightness(0x07);//0-7, onoff = 생략가능, defult true
seg7.setSegments(En_Font); // 표시할 fnd 전체, 원하는부분을 자체적으로 설정하는기능
// data는 배열형태로 해야 됨
// 7세그먼트는 K(-) 컴몬이므로 A(+)형태의 Data 이어야 함
// setSegments(segments, length, position)
// segments = 표시할 데이터(바이트 배열형태)
// length = 표시할 숫자의 자릿수(표시할 바이트 수, 문자 수)
// position = 표시항 시작 위치(0-3)
// - x1000 = 0, x100 - 1, x10 = 2, x1 = 3
// - 멘 왼쪽이 = 0, 오른쪽 끝 = 3
delay(1000);
seg7.clear(); // 전체 지움
seg7.setSegments(twelve, 2, 1);
delay(1000);
seg7.clear();
seg7.showNumberDec(567, true);
delay(1000);
seg7.clear();
seg7.showNumberDec(123);
delay(1000);
// 끝 한지리 설정
seg7.showNumberDec(4, false, 1, 3);
delay(1000);
// Dot 표시(쿨롬 포함) = : 이 있는 모델른 .Dot가 표시 안됨
seg7.clear();
seg7.showNumberDecEx(1234, 0x40, false, 4, 0);
delay(1000);
//hex 표시
seg7.clear();
seg7.showNumberHexEx(0xab5f, 0x40, false, 4, 0);
delay(1000);
// 10에서 13가지 십진수를 16진수로 변화하여 표시할때
seg7.clear();
for (int i=0; i<4; i++)
hex[i] = seg7.encodeDigit(10 + i);
seg7.setSegments(hex);
}
void loop() {
// Arduino 영문자 스크룰 표시하기
for (int i=0; i <= 9; i++) {
seg7.setSegments(Arduino + i);
delay(200);
}
delay(500);
for (int i=10; i>=0; i--) {
seg7.setSegments(Arduino + i);
delay(200);
}
delay(500);
// 난수 발생 표시 seg7.clear(); // Clear the display
long randNumber = random(0, 9999); // Generate a random number between 0 and 9999
seg7.showNumberDec(randNumber, false); // Display the number
delay(500);
// 9999 까지 표시하기
seg7.clear(); // Clear the display
for (int i=0; i <= 9999; i++){
seg7.showNumberDec(i, true); // i=value, true to padd the blank segments with 0
delay(100);
};
delay(1000);
// put your main code here, to run repeatedly:
// // 실습3 = display on /off
// for (int i=0; i<5; i++) {
// seg7.setBrightness(7, false);
// seg7.setSegments(data);
// delay(1000);
// seg7.setBrightness(7, true);
// seg7.setSegments(data);
// delay(1000);
// }
/*
// 실습 2 = 7Seg 밝기변화
for (int brightness=0; brightness<=7; brightness++) {
seg7.setBrightness(brightness, true);
seg7.setSegments(data);
delay(1000);
}
*/
/*
// 실습 1
for(int i=0; i<= 255; i++)
{
seg7.showNumberDec(i);
delay(500);
}
*/
}