이런거 저런거 그런거
8x8 LED 매트릭스 한 줄 컨트롤 해보기 본문
이번에는 한 줄 컨트롤 해 볼 차례
Led 하나만 켜고 끌때는 점퍼선이 2개면 충분했지만
Row 1개 + Column 8개 해서 총 9개가 필요하다.
빵판에 꼽아 사용하려 했는데 이런...
이렇게 안꼽아지는 불상사가..... 빵판에 꼽아 사용하고 싶어서 2개를 이용했다.
꼽기 전에 1번 핀 위치가 항상 헷갈려서 아래와 같이 파란색 네임팬으로 표시~
우선 핀 배열에 맞게 선을 연결 한 뒤
Matrix의 9번 핀을 HIGH로 설정 한 상태에서
켜고 싶은 Led에 해당하는 Column의 핀만 Low로 설정 할 것이다.
이를 위해 핀 연결을
[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로....
- 지금은 아두이노 핀 배열을 순서대로 해서 점퍼선이 저리되었지만 다음번엔 반대로 해서 좀 깔끔하게...
'이것저것 해보기 > 아두이노 가지고 놀기' 카테고리의 다른 글
조도센서값을 도트 매트릭스에 표시하기 (0) | 2019.09.22 |
---|---|
Matrix LED를 좀 쉽게 컨트롤하는 방법(MAX7219) (0) | 2019.09.21 |
8x8 Led Matrix를 전체 컨트롤 해 보기 (0) | 2019.09.17 |
8x8 LED 매트릭스에서 LED 하나 깜박거리게 해보기 (0) | 2019.09.08 |
아두이노 구입 및 개발환경 설정하기 (0) | 2019.09.08 |