[아두이노] 아두이노 8x32 도트 매트릭스 사용해보기










8x32 Dot Matrix



안녕하세요. 디바이스마트 대짜이찐입니다.


이번에는 지하철이나 가게 간판에 등에 전광판으로 쓰이는
도트 매트릭스를 한번 다뤄 보겠습니다.


일반적인 8x8 도트매트릭스의 구조입니다. 내부에 led가 64개 배치되어 있으며,

매트릭스 종류는은 led 방향에 따라 Common-row anode 타입(오른쪽)과
Common-row cathode 타입(왼쪽)으로 나뉘어 집니다.
http://www.devicemart.co.kr/goods/view?no=1330850


전광판에 자주 사용 되는 도트 매트릭스입니다.

8x8 도트매트릭스 4개를 합친 모듈로 되어있으며,
Max7219칩을 3 wire interface SPI 통신으로 사용하였기 때문에
전원 핀과 SPI 통신핀만으로 (5개 핀) 동작이 가능합니다.

8x8 도트매트릭스를 Max7219와 같은 8-Digit LED Display Drivers를

사용하지 않으면 제어하는데 핀이 무척 많이 필요합니다.

하지만 이 모듈에는 Max7219칩이 4개 포함되어 있으므로
문제 없이 5개의 핀으로 제어 하면 됩니다.


라이브러리 링크입니다. 다운받아서 아두이노 라이브러리에 추가 시켜 줍니다.





추가로 구글에 Sprite Generator for  MATRIX 8x8 로 검색하시면
아래 링크처럼 원하는 도트를 배열로 변환시켜주는 사이트가 많이 있습니다.






아두이노와 Dot Matrix 연결








준비물: 아두이노 우노, 점퍼선, 8x32 도트 매트릭스 모듈



아두이노
Dot Matrix
비고
5V
Power
VCC
GND
GND
Ground
D12
DIN
MOSI
D10
CS
Chip Select
D11
CLK
SCLK



/*
8x32 dot matrix
아래 링크에서 LedControl 라이브러리를 다운로드
https://github.com/wayoda/LedControl
http://www.devicemart.co.kr/
*/


#include "LedControl.h" // 라이브러리 사용 선언


// Din 핀을 12번, ClK핀을 11번 CS핀을 10번에 연결, 매트릭스는 4개를 사용 선언
LedControl lc=LedControl(12,11,10,4);
int num;


void setup()
{
for(num=0; num<4; num++) // 매트릭스 0번부터 3번까지 세팅
 {
  lc.shutdown(num,false); // 0~3번까지 매트릭스 절전모드 해제
  lc.setIntensity(num,8); // 매트릭스의 밝기 선언 0~15의 수
  lc.clearDisplay(num); // 매트릭스 led를 초기화
 }
}


// matrix 함수 선언
void matrix()
{
 // 한글 '매'를 이진수로 배열 선언
  byte m[8]={
            B00000101,
            B00000101,
            B11110101,
            B10010111,
            B10010101,
            B11110101,
            B00000101,
            B00000101
            };
 // 한글 '트'를 이진수로 배열 선언
byte t[8]={
           B00111100,
           B00100000,
           B00111100,
           B00100000,
           B00111100,
           B00000000,
           B01111110,
           B00000000
           };


// 한글 '릭'를 이진수로 배열 선언
byte r[8]={
           B01111010,
           B00001010,
           B01111010,
           B01000010,
           B01111010,
           B00000000,
           B00111110,
           B00000010
          };
 // 한글 '스'를 이진수로 배열 선언
byte x[8]={
           B00000000,
           B00001000,
           B00010100,
           B00100010,
           B01000001,
           B00000000,
           B01111111,
           B00000000
           };


// lc.setRow 함수는 행(Row) 기준으로 도트매트릭스를 제어 lc.setRow(matrix_number,Row,value)
for(int j=0; j<8; j++)
{
  lc.setRow(0,j,m[j]); // 0번째 매트릭스에서 '매'출력
  lc.setRow(1,j,t[j]); // 1번째 매트릭스에서 '트'출력
  lc.setRow(2,j,r[j]); // 2번째 매트릭스에서 '릭'출력
  lc.setRow(3,j,x[j]); // 3번째 매트릭스에서 '스'출력
}
delay(1000);
}


void loop() {
 matrix();
 for(num=0; num<4; num++) // 4개의 매트릭스led 초기화
{
 lc.clearDisplay(num);
}
delay(1000);


}



제대로 작동하네요.


8x32 도트 매트릭스에 따라서 위 소스코드대로 안되고
좌우가 뒤집혀서 나오는 경우가 있습니다.

이럴 경우 소스코드에서 출력 부분을 순서를 바꾸시기 바랍니다.

1
2
3
4
5
6
7
lc.setRow(3,j,m[j]); // 0번째 매트릭스에서 '매'출력
lc.setRow(2,j,t[j]); // 1번째 매트릭스에서 '트'출력
lc.setRow(1,j,r[j]); // 2번째 매트릭스에서 '릭'출력
lc.setRow(0,j,x[j]); // 3번째 매트릭스에서 '스'출력

이렇게 0,1,2,3의 순서를 3,2,1,0으로 바꿔주면 동작합니다.

감사합니다.

도트 매트릭스에서 글자를 이동시키는 것에 관한 포스트는
아래 링크에 있습니다.

https://devicemart.blogspot.com/2019/06/8x32.html





댓글 쓰기

1 댓글