[아두이노 강좌] 8x8 LED 매트릭스 연결하기(2088AB-1)

Edgar 2016-03-17 (목) 10:36 3년전 6440  

 

271951df9e87262f3839b04680c205b6_1458178

[ 아두이노 강좌. 아두이노 도트 매트릭스 연결하기]

 

아두이노에 도트매트릭스를 연결하여 자신만의 8x8비트의 그림을 출력해 보도록 합니다.

도트 매트릭스란 다수의 led들로 구성되어 각각의 led를 출력함으로서 특정 기호, 그림등을 표현 할 수 있도록 하는 장치 입니다.



출처 [메카솔루션] http://Mechasolution.com

 

271951df9e87262f3839b04680c205b6_1458178
 

 


[준비물 (클릭 → 구매사이트로 이동합니다)]

우노 R3 보드 , 우노 전원 케이블 , 8x8 LED 매트릭스

271951df9e87262f3839b04680c205b6_1458178
271951df9e87262f3839b04680c205b6_1458178


위의 도트 매트릭스는 16개의 핀으로 총 64개의 led 를 제어 할 수 있으며,

이를 위해 다음과 같은형식으로회로가 구성되어 있습니다.

 

271951df9e87262f3839b04680c205b6_1458178
 

이그림만 보아서는 핀의 배치와 led배치의 관계를 확실히 이해하기 힘들기 때문에 다음과 같이 정리하겠습니다.

 

271951df9e87262f3839b04680c205b6_1458178
 

A = 13, B = 3, C = 4, D = 10,

E = 6, F = 11, G = 15, H = 16,

I = 9, J = 14, K = 8, L = 12,

M = 1, N = 7, O = 2, P = 5

 

회로를 배선하도록 하겠습니다.

 

혹시 UNO 혹은 NANO의 경우 MEGA보드와 달리 디지털 핀의 갯수가 적어 16개의 핀을 모두 꽂을 수 없지 않을까 걱정하실 수 있겠지만.

아날로그 핀들, 즉 A0,A1,A2,A3,A4,A5의 핀들은 14,15,16,17,18번째 디지털 핀으로써 사용이 가능합니다.

 

아두이노의 디지털 0번 핀과 1번 핀은 다운로드에 사용이 되니 2번 핀부터 연결하도록하겠습니다.

ARDUINO MATRIX

2 13

3 3

4 4

5 10

6 6

7 11

8 15

9 16

10 9

11 14

12 8

13 12

14(A0) 1

15(A1) 7

16(A2) 2

17(A3) 5


이렇게 배선을 하셨다면, 무었을 도트매트릭스로 표시하고 싶은지 생각해 봅시다.

저는 요즘 페이스북을 재미있게 하고 있기때문에 좋아요를 출력해보려 합니다.

우선 0과 1로 만들어봅시다.
 
00000100
00001100
00001100
11111111
11111111
11111111
11111110
11100000

이것을 특수기호로 바꾸어서 보여드리자면 이렇습니다.

□□□□□■□□
□□□□■■□□
□□□□■■□□
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■□
■■■□□□□□

바라던 바와는 다르지만 만족스럽게 나왔습니다.

0과 1로 만든 캐릭터는 메모장에 저장해 주세요.

그것을 참고해서 아두이노의 코드를 작성해 보도록 하겠습니다.

byte charactor[8]  =  {0b00000100,
                  0b00001100,
                  0b00001100,
                          0b11111111,
                          0b11111111,
                          0b11111111,
                          0b11111110,
                          0b11100000};
//0과1로 만든 모양이 다음과 같이 사용됩니다.
//0b뒤에 한줄씩 넣어주세요(0b는 값의 형식을 이진법으로 지정한다는 의미입니다.)
                         

void setup() {
  // put your setup code here, to run once:
  for(int pin = 2;pin<18;pin++){
    pinMode(pin,OUTPUT);
  }//사용되는 핀들을 모두 출력으로 지정합니다.
  for(int pin = 10;pin<18;pin++){
    digitalWrite(pin,HIGH);
    delay(100);
  }
  for(int pin = 2;pin<10;pin++){
    digitalWrite(pin,HIGH);
    delay(100);
  }
  //위의 두 for문은 약간의 start스크린처럼 보이기 위함입니다.
}

void setonoff(byte state){
  for(int i = 0;i<8;i++){
    int a = ((state>>i&0x01)==0x01? HIGH:LOW);
    digitalWrite(i+10,a);
  }
}//1byte의 각 비트를 핀의 HIGH LOW로 바꿔주기 위한 코드입니다.

void loop() {
  // put your main code here, to run repeatedly:
  for(int i =0 ;i<8;i++){
    setonoff(charactor[i]);
    digitalWrite(i+2,LOW);
    delay(1);
    digitalWrite(i+2,HIGH);
  }//각층을 순차적으로 출력하기 위함입니다.
}


[동작 사진]

 

271951df9e87262f3839b04680c205b6_1458178

 

출처 [메카솔루션] http://Mechasolution.com

▶아래 플러스 친구 버튼을 통해 다양한 정보와 교제 자료 및 이벤트등의 소식을 받아보실 수 있습니다.




모바일 버전으로 보기