라즈베리파이, 아두이노

[간단한 아두이노 코딩] 14. 도트 매트릭스 사용하기

포도알77 2020. 11. 24. 10:23

도트 매트릭스 사용하기

 

1. 도트 매트릭스

 8x8 도트 매트릭스는 총 64개의 LED가 총 16개의 선으로 연결되어 있는 장치이다. 

 

 

64개의 LED를 제어하기 위해서 행과 열이 8개의 LED에 +극과 -극으로 연결되어 있다. 마찬가지로 LED의 극성 연결에 따라서 A타입 B타입으로 나뉜다. 

 

 

 위 처럼 1,6 지점의 LED를 켜기 위해서는 Row1과 Col6을 극성에 맞는 값을 인가해야 한다.

 

 내가 사용중인 1088BS는 아래와 같이 구성되어 있다.

 

 

2. 매트릭스 연결 방법

 아두이노에는 아날로그 핀 6개와 디지털핀 14개가 있다. 총 16개의 핀이 필요하므로 우리는 아날로그 핀2개와 디지털 핀 14개를 쓰면된다. 여기서 아날로그 핀은 디지털 핀처럼 쓸 수있다. 다만 특정보드에서는 제약 사항이 있으므로 확인이 필요하다.

  1 2 3 4 5 6 7 8
Row 핀 9 14 8 12 1 7 2 5
GPIO 할당 A4 A5 0 1 2 3 4 5
Col 핀 13 3 4 10 6 11 15 16
GPIO 할당 6 7 8 9 10 11 12 13

3. 소스코드

int rows[8] = {6,11,5,9,A4,4,A5,2};
int cols[8] = {10,0,1,7,3,8,12,13};

// 매트릭스 출력
int matrix[8]={
  0b00011000,
  0b00100100,
  0b00100100,
  0b01000010,
  0b11111111,
  0b10000001,
  0b10000001,
  0b10000001
};

// 핀모드 출력 설정
// 매트릭스 초기화
void setup() {
  for(int i=0; i<8; i++){
    pinMode(rows[i], OUTPUT);
    pinMode(cols[i], OUTPUT);
    digitalWrite(rows[i], false);
    digitalWrite(cols[i], true);
  }
}

void display(){
  // Row 단위로 출력
  for(int i=0; i<8; i++){
    // 선택한 Row에 전원 인가
    digitalWrite(rows[i], HIGH);
    // 컬럼별로 전원 인가
    // col은 GND 인가시 LED를 켠다.
    // bitRead는 value에서 j번째 비트 값을 가져온다.
    for(int j=0; j<8; j++)
      digitalWrite(cols[j], !bitRead(matrix[i],j));
    // 모든 컬럼 전원을 끈다.
    // 끄지 않는 경우, 이번 행의 Column이 
    // 다음 Row에 enable되어 있는 상태이기 때문에 LED가 잠깐 들어온다.
    for(int j=0; j<8; j++)
      digitalWrite(cols[j], HIGH);
    digitalWrite(rows[i], LOW);
  }
}
void loop() {
  display();
}
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사