도트 매트릭스(Dot matrix)는 led matrix라고도 부르는 제품으로
주로 지하철, 버스, 가게 간판등에서 글자와 숫자를 표현하는데 사용되는 제품입니다.
이번에 사용해볼 8x8 도트 매트릭스는 내부에 led가
8행(row) 8열(column)로 64개가 들어가있고,
FND와 마찬가지로 공통(Common) 애노드(Anode) 타입,
공통 캐소드(Cathode) 타입으로 종류가 나뉘어집니다.
이번에 사용해볼 공통 애노드(Anode)타입 내부 회로도 및 핀맵입니다.
공통 캐소드(Cathode)타입의 경우 내부 led가 반대로 연결되어 있습니다.
위에서 본 데이터 시트 처럼 핀 순서가 행(row) 열(column)이
순서대로 매칭되어 있지 않습니다.
이렇게 가운데에 동그랗게 튀어나온면이 있는 쪽이 1번입니다.
준비물: 아두이노 우노, 점퍼선, 브레드보드, 8x8 도트 매트릭스(anode타입)
도트매트릭스 1열(column)부터 아두이노 D2번핀에 연결했습니다.
모자란 디지털 단자는 A0~A3까지를 D14~17로 사용할 수 있습니다.
도트 매트릭스(열)
|
아두이노
|
도트 매트릭스(행)
|
아두이노
|
13
|
D2
|
9
|
D10
|
3
|
D3
|
14
|
D11
|
4
|
D4
|
8
|
D12
|
10
|
D5
|
12
|
D13
|
6
|
D6
|
1
|
A0(D14)
|
11
|
D7
|
7
|
A1(D15)
|
15
|
D8
|
2
|
A2(D16)
|
16
|
D9
|
5
|
A3(D17)
|
도트매트릭스를 제어하기 위해서는 1행 혹은 1열로만 제어가 가능합니다.
동시에 다른 행, 다른열까지 제어하려고하면, 모든 LED가 켜지게 되죠.
그럼 어떻게 원하는 led만 골라서 출력을 할 수 있을까요?
아래 예제는 위에서부터 아래로 하나의 행씩 제어를 합니다.
하지만 매우 빠른속도로 on/off를 하기 때문에
사람의 눈에는 착시현상 즉 잔상효과로 모든 행의 led를 제어하는걸로 보여
하트 모양이 눈에 보이게 됩니다.
이런식으로 매트릭스를 제어하는 방법을 다이나믹(Dynamic) 구동방법이라고 합니다.
아래 예제는 도트 매트릭스를 이용하여 하트모양을 만들어 보는 예제소스입니다.
아래 예제는 도트 매트릭스를 이용하여 하트모양을 만들어 보는 예제소스입니다.
/*
8x8 dot-matrix heart
http://www.devicemart.co.kr/
*/
// 행(row)열(column) 도트매트릭스 led 아두이노에 연결
// -1,-2는 행열을 1부터 시작하기 위해 더미(dummy) 핀으로 넣음
int rows[] = {-1,10,11,12,13,14,15,16,17};
int cols[] = {-2,2,3,4,5,6,7,8,9};
void setup()
{
for (int i = 1; i < 9; i++) // 도트매트릭스 행열 출력으로 세팅
{
pinMode(cols[i], OUTPUT);
pinMode(rows[i], OUTPUT);
}
}
void loop()
{ // 1행엔 켜지는 led가 없음으로 생략
clear(); // 사용자 정의함수 clear 호출, led 초기화
digitalWrite(rows[2],HIGH); // 2행 led on
digitalWrite(cols[2],LOW);
digitalWrite(cols[3],LOW);
digitalWrite(cols[6],LOW);
digitalWrite(cols[7],LOW);
delay(2);
clear();
digitalWrite(rows[3],HIGH); // 3행 led on
digitalWrite(cols[1],LOW);
digitalWrite(cols[4],LOW);
digitalWrite(cols[5],LOW);
digitalWrite(cols[8],LOW);
delay(2);
clear();
digitalWrite(rows[4],HIGH); // 4행 led on
digitalWrite(cols[1],LOW);
digitalWrite(cols[8],LOW);
delay(2);
clear();
digitalWrite(rows[5],HIGH); // 5행 led on
digitalWrite(cols[1],LOW);
digitalWrite(cols[8],LOW);
delay(2);
clear();
digitalWrite(rows[6],HIGH); // 6행 led on
digitalWrite(cols[2],LOW);
digitalWrite(cols[7],LOW);
delay(2);
clear();
digitalWrite(rows[7],HIGH); // 7행 led on
digitalWrite(cols[3],LOW);
digitalWrite(cols[6],LOW);
delay(2);
clear();
digitalWrite(rows[8],HIGH); // 8행 led on
digitalWrite(cols[4],LOW);
digitalWrite(cols[5],LOW);
delay(2);
}
void clear() // 사용자 정의함수 clear 선언
{
for(int i = 1; i < 9 ; i++) // LED 초기화 for문
{
digitalWrite(rows[i],LOW);
digitalWrite(cols[i],HIGH);
}
}
|
소스 코드중에
-clear()함수는 사용자 정의함수로 임의로 만든 함수입니다.
안에 있는 for문으로 모든 행열의 led를 제어하여 초기화 시키는 함수입니다.
clear()를 사용해서 함수를 호출 할 수 있습니다.
max7219를 사용한 8x32 도트매트릭스를 사용한 포스팅은 아래링크입니다.
https://devicemart.blogspot.com/2019/04/8x32.html
도트매트릭스 구매링크
http://www.devicemart.co.kr/goods/catalog?code=000600040002
max7219를 사용한 8x32 도트매트릭스를 사용한 포스팅은 아래링크입니다.
https://devicemart.blogspot.com/2019/04/8x32.html
도트매트릭스 구매링크
http://www.devicemart.co.kr/goods/catalog?code=000600040002
0 댓글