이런거 저런거 그런거

8x8 LED 매트릭스 한 줄 컨트롤 해보기 본문

이것저것 해보기/아두이노 가지고 놀기

8x8 LED 매트릭스 한 줄 컨트롤 해보기

빵진 2019. 9. 8. 23:50

이번에는 한 줄 컨트롤 해 볼 차례

Led 하나만 켜고 끌때는 점퍼선이 2개면 충분했지만 

Row 1개 + Column 8개 해서 총 9개가 필요하다. 

 

빵판에 꼽아 사용하려 했는데 이런...

이렇게 안꼽아지는 불상사가..... 빵판에 꼽아 사용하고 싶어서 2개를 이용했다.

꼽기 전에 1번 핀 위치가 항상 헷갈려서 아래와 같이 파란색 네임팬으로 표시~

1번 핀 위치 표시

우선 핀 배열에 맞게 선을 연결 한 뒤

Matrix의 9번 핀을 HIGH로 설정 한 상태에서

켜고 싶은 Led에 해당하는 Column의 핀만 Low로 설정 할 것이다.

1088BS

이를 위해 핀 연결을

[Column]

아두이노 Digital Pin 2 ---> Column 1 : Matrix Pin 13

아두이노 Digital Pin 3 ---> Column 2 : Matrix Pin 3

아두이노 Digital Pin 4 ---> Column 3 : Matrix Pin 4

아두이노 Digital Pin 5 ---> Column 4 : Matrix Pin 10

아두이노 Digital Pin 6 ---> Column 5 : Matrix Pin 6

아두이노 Digital Pin 7 ---> Column 6 : Matrix Pin 11

아두이노 Digital Pin 8 ---> Column 7 : Matrix Pin 15

아두이노 Digital Pin 9 ---> Column 8 : Matrix Pin 16

 

[Row]

아두이노 Digital Pin 10 ---> Column 1 : Matrix Pin 9

와 같이 연결후 우선 1차적으로 Row의 8개 LED를 다 켜 보았다.

#define ARRAY_SIZE(x) (sizeof((x))/sizeof((x)[0]))

#define MATRIX_13 (2)  //Matrix의 13번 핀을 컨트롤 하는 아두이노의 핀 번호 : 2
#define MATRIX_3  (3)  //Matrix의 3번 핀을 컨트롤 하는 아두이노의 핀 번호 : 3
#define MATRIX_4  (4)  //Matrix의 4번 핀을 컨트롤 하는 아두이노의 핀 번호 : 4
#define MATRIX_10 (5)  //Matrix의 10번 핀을 컨트롤 하는 아두이노의 핀 번호 : 5
#define MATRIX_6  (6)  //Matrix의 6번 핀을 컨트롤 하는 아두이노의 핀 번호 : 6
#define MATRIX_11 (7)  //Matrix의 11번 핀을 컨트롤 하는 아두이노의 핀 번호 : 7
#define MATRIX_15 (8)  //Matrix의 15번 핀을 컨트롤 하는 아두이노의 핀 번호 : 8
#define MATRIX_16 (9)  //Matrix의 16번 핀을 컨트롤 하는 아두이노의 핀 번호 : 9
#define MATRIX_9  (10) //Matrix의 9번 핀을 컨트롤 하는 아두이노의 핀 번호  : 10

/* Pin Definition */
unsigned int col_pins[] = {MATRIX_13, MATRIX_3, MATRIX_4, MATRIX_10, MATRIX_6, MATRIX_11, MATRIX_15, MATRIX_16};
unsigned int row_pin = MATRIX_9;

void setup()
{
  int i;
  // 해당 핀에 대해 출력 설정을 해 준다.
  pinMode(row_pin, OUTPUT);
  for (i = 0; i < ARRAY_SIZE(col_pins); i++) {
    pinMode(col_pins[i], OUTPUT);
  }

  //처음 상태는 둘 다 HIGH로 설정해서 LED 끄기
  for (i = 0; i < ARRAY_SIZE(col_pins); i++) {
    digitalWrite(col_pins[i], LOW);
  }
  digitalWrite(row_pin, HIGH);
}

void loop()
{
}

한 줄 켜기

아무래도 아두이노의 핀 기준으로 정렬했기 때문에 선이 막 날라다닌다... 

왜 Led Matrix 의 핀 배열은 순차적이 아닌지 모르겠지만 다음번엔 우선 보기 좋게 연결 코드에서 맞는 핀을 선택해서 해야 할 것 같다.

 

 

이번엔 차례대로 점등 해 보기

#define ARRAY_SIZE(x) (sizeof((x))/sizeof((x)[0]))

#define MATRIX_13 (2)  //Matrix의 13번 핀을 컨트롤 하는 아두이노의 핀 번호 : 2
#define MATRIX_3  (3)  //Matrix의 3번 핀을 컨트롤 하는 아두이노의 핀 번호 : 3
#define MATRIX_4  (4)  //Matrix의 4번 핀을 컨트롤 하는 아두이노의 핀 번호 : 4
#define MATRIX_10 (5)  //Matrix의 10번 핀을 컨트롤 하는 아두이노의 핀 번호 : 5
#define MATRIX_6  (6)  //Matrix의 6번 핀을 컨트롤 하는 아두이노의 핀 번호 : 6
#define MATRIX_11 (7)  //Matrix의 11번 핀을 컨트롤 하는 아두이노의 핀 번호 : 7
#define MATRIX_15 (8)  //Matrix의 15번 핀을 컨트롤 하는 아두이노의 핀 번호 : 8
#define MATRIX_16 (9)  //Matrix의 16번 핀을 컨트롤 하는 아두이노의 핀 번호 : 9
#define MATRIX_9  (10) //Matrix의 9번 핀을 컨트롤 하는 아두이노의 핀 번호  : 10

/* Pin Definition */
unsigned int col_pins[] = {MATRIX_13, MATRIX_3, MATRIX_4, MATRIX_10, MATRIX_6, MATRIX_11, MATRIX_15, MATRIX_16};
unsigned int row_pin = MATRIX_9;

void setup()
{
  int i;
  // 해당 핀에 대해 출력 설정을 해 준다.
  pinMode(row_pin, OUTPUT);
  for (i = 0; i < ARRAY_SIZE(col_pins); i++) {
    pinMode(col_pins[i], OUTPUT);
  }

  digitalWrite(row_pin, HIGH);
  //처음 상태는 모두 끄기
  for (i = 0; i < ARRAY_SIZE(col_pins); i++) {
    digitalWrite(col_pins[i], HIGH);
  }
}

int prev = 0;
int current = 0;
void loop()
{
  // 이전에 켜진 LED를 꺼주기 위해 Column pin을 HIGH로 설정한다.
  digitalWrite(col_pins[prev], HIGH);

  // current pin에 해당하는 LED를 켜자
  digitalWrite(col_pins[current], LOW);

  prev = current;
  if ((current + 1) == ARRAY_SIZE(col_pins)) {
    current = 0;
  } else {
    current = current + 1;
  }
  delay(200); //200ms delay
}

첫 번째 줄 차례대로 점등하기

완성~!

 

 

+ 잡담

- Sketch에 들여쓰기가 tab으로 되었으면... 기왕이면 set tw=8로....

- 지금은 아두이노 핀 배열을 순서대로 해서 점퍼선이 저리되었지만 다음번엔 반대로 해서 좀 깔끔하게...

Comments