자료실/공통 자료실

아두이노 - 8X8 도트 매트릭스 모듈 사용

자료수집중 2019. 5. 29.
반응형

보통 사용하시는 아두이노의 디지털 핀 이 나노나 우노라면 보통 14개입니다.(나머지는 핀 수가 많아지다 보니 덩치가..)

처음에 LED로 문자를 만들어 볼까 했을 때 14개 핀으로는 별로 쓸 수 있는 문자가 없어서 사용하게 된 게 도트 매트릭스입니다.

-도트매트릭스란

 

8x8 도트 매트릭스

이번에 사용할 도트 매트릭스는 8X8이지만 굉장히 여러 가지 크기가 판매되고 있습니다.

모듈 여러 개를 붙여서 사용할 수도 있습니다.

먼저 8X8 도트 매트릭스의 회로도를 보겠습니다.

출처:https://howtomechatronics.com

64개의 LED를 작동시키기 위해 MAX7219를 사용하여 결과적으로 아두이노는 3핀만으로 작동할 수 있게 해 줍니다.

 

MAX7219는 (8x8 도트 매트릭스 기준)

PIN 이름 설명
1 DIN 데이터 입력핀
2,3,5,6,7,8,10,11 DIG 매트릭스의 열
4,9 GND 그라운드
12 LOAD(CS) 칩 선택 핀(여러개의 도트매트릭스 모듈 사용시)
13 CLK 클럭 입력 핀
14,15,16,17,20,21,22,23 SEG 매트릭스의 행
18 ISET 저항을 이용한 최대 전류설정(보류)
19 V+ VCC전원
24 DOUT 데이터 출력(모듈 여러개 사용시

 

-아두이노와의 회로도 구성

*DIN, CLK, CS는 유동적으로 사용

 

 

 

 

-코드

여러 가지 라이브러리가 있지만

LedControl를 사용하도록 하겠습니다.

기본적으로 있기도 하고 없으시면 라이브러리 관리에서 검색하면 받을 수 있습니다.

 

-LedControl name =LedControl(int DIN, int CLK, int CS, int Device);

아두이노에 연결된 DIN, CLK, CS를 입력하고 Device에 연결되어있는 매트릭스의 개수를 입력

 

-name.shutdown(int addr, boolean state);

절전모드를 제어하는 함수

addr = 연결된 매트릭스의 주소 (0번째부터 시작)

true를 주면 절전모드로 들어가 모듈이 Off

false를 주면 절전모드가 해제되고 모듈이 On

 

-name.setIntensity(int addr, int brightness);

addr = 연결된 매트릭스의 주소 (0번째 부터 시작)

brightness = 매트릭스의 밝기 조절 0~15까지 가능

 

-name.clearDisplay(int addr);

addr = 연결된 매트릭스의 주소 (0번째 부터 시작)

지정된 매트릭스를 초기화

 

-name.setLed(int addr, int row, int col, boolean state);

n번째 매트릭스, LED 행, LED 열, LED 상태 = LED 1개를 제어(행과 열은 0부터 시작)

ex)

#include "LedControl.h"

LedControl dot =LedControl(12,11,10,1);

void setup() {
  dot.shutdown(0,false); 
  dot.setIntensity(0,5);
  dot.clearDisplay(0); 
  dot.setLed(0,  0,  0, true); 
}

void loop() {
}

0행0열 LED ON

-name.setRow(int addr, int row, byte value)

n번째 매트릭스, n번째 행, byte값으로 led제어

ex)

#include "LedControl.h"

LedControl dot =LedControl(12,11,10,1);

void setup() {
  dot.shutdown(0,false); 
  dot.setIntensity(0,5);
  dot.clearDisplay(0); 
  dot.setRow(0,1,B11111111);
}

void loop() {
  
}

1행 8개 LED ON

-name.setRow(int addr, int column, byte value)

n번째 매트릭스, n번째 열, byte값으로 led제어

ex)

#include "LedControl.h"

LedControl dot =LedControl(12,11,10,1);
 
void setup() {
  dot.shutdown(0,false); 
  dot.setIntensity(0,5);
  dot.clearDisplay(0); 
  dot.setColumn(0,1,B11111111);
}

void loop() {
  
}

1열 8개 LED ON

 

 -응용 움직이는 하트 만들기

#include <LedControl.h>

LedControl dot =LedControl(12,11,10,1);

byte heart[]={
  B01101100,
  B11111110,
  B11111110,
  B11111110,
  B01111100,
  B00111000,
  B00010000,
  B00000000
  };

void setup() {
  dot.shutdown(0,false);
  dot.setIntensity(0,5);
  dot.clearDisplay(0);
}

void loop() {
  // put your main code here, to run repeatedly:
  dotmatrix();
  delay(200);
}
void dotmatrix(){
  for(int i=0;i<8;i++){
    dot.setRow(0,i,heart[i]); 
  }
  for(int i=0;i<8;i++){
    if((heart[i]& 0b10000000)>0){
      heart[i]=heart[i]<<1;
      heart[i]+=B00000001;
    }
    else{
      heart[i]=heart[i]<<1;
    }
  }
}

배열을 사용하여 하트 모양으로 byte값을 입력

'<<' 시프트를 사용하여 하트를 움직이게 만듦

 

 

댓글