▣ MAX7219CNG
MAX7219CNG는 LED 디스플레이 드라이버 IC로, 8x8 매트릭스 LED를 제어하는 데 사용됩니다.
핵심 핀 구성
| VCC | 역할: 전원 공급 (+4V~5.5V). |
| GND | 역할: 접지 연결. |
| DIN (Data In) | 역할: 마이크로컨트롤러(예: 아두이노)에서 데이터를 보내는 핀. |
| CS (Chip Select) | 역할: SPI 통신 시 클럭 신호를 전달하는 핀. |
| CLK (Clock) | 역할: 칩 선택 신호. 마이크로컨트롤러에서 LOW로 설정해 해당 MAX7219를 활성화합니다. |
CS (Chip Select)
"데이터가 언제 이동해야 하는지 알려주는 박자 신호" 같은 역할을 합니다.
마치 음악을 연주할 때 지휘자가 박자를 맞추듯,
SCLK 핀은 마스터(주로 마이크로컨트롤러)가 슬레이브(디스플레이, 센서 등)에게 "지금 데이터 보내!", "지금 받아!"라고 타이밍을 알려줍니다.
CS (Clock) 핀 = TV 리모컨의 "전원 버튼"
. LOW (켜짐): "이 장치야, 내 말 들어!" (해당 장치를 활성화)
. HIGH (꺼짐): "너 말고 다른 애들은 조용히 해!" (다른 장치는 무시)
마이크로컨트롤러가 CS 핀을 LOW로 설정하면, 해당 MAX7219가 "내 차례구나!" 하고 활성화됩니다.
이때 DIN과 CLK 핀을 통해 데이터를 전송해요.
데이터 전송이 끝나면 CS 핀을 다시 HIGH로 올려서 다른 장치를 선택할 준비를 합니다.
▣ LedControl.h 코드 적용 방법
LedControl.h 라이브러리는 LED 매트릭스 디스플레이를 제어합니다.
#include "LedControl.h"
- LedControl.h는 LED 매트릭스를 제어하기 위한 라이브러리로, 이를 사용하기 위해 코드 상단에 포함합니다.
LedControl lc: LedControl 클래스의 객체 lc를 선언합니다.
LedControl lc = LedControl(12, 11, 10, 1);
12, 11, 10: 이 세 개의 핀 번호는 LED 매트릭스와의 연결을 나타냅니다.
1) MAX7219CNG 매트릭스 DIN => 아두이노 핀 12: ENA (Enable A), 매트릭스의 A 열을 활성화하는 데 사용됩니다.
2) MAX7219CNG 매트릭스 CLK => 아두이노 핀 11: ENB (Enable B), 매트릭스의 B 행을 활성화하는 데 사용됩니다.
3) MAX7219CNG 매트릭스 CS => 아두이노 핀 10: CS (Chip Select), 여러 개의 LED 매트릭스를 사용할 때 특정 매트릭스를 선택하는 데 사용됩니다.
1: 이 매트릭스가 단일 매트릭스임을 나타냅니다. 여러 매트릭스들을 병렬로 연결할 경우 이 값을 증가시킬 수 있습니다.
▣ 예제 코드
#include "LedControl.h"
// LedControl 객체 생성 (핀 번호 설정 필요)
LedControl lc = LedControl(12, 11, 10, 1);
void setup() {
// 매트릭스 전원 켜기
lc.shutdown(0, false);
// 밝기 설정 (0~15)
lc.setIntensity(0, 15);
// 디스플레이 초기화
lc.clearDisplay(0);
}
void loop() {
// 왼쪽 하단 첫 번째 LED의 위치 (행 0, 열 0)
int row = 0;
int col = 0;
while(true) {
lc.setLed(0, row, col, true); // LED 켜기
delay(500); // 0.5초 대기
lc.setLed(0, row, col, false); // LED 끄기
delay(500); // 0.5초 대기
}
}
▣ 코드 설명
void setup() 함수는 Arduino 프로그램에서 한 번만 실행되는 초기화 코드를 작성하는 곳입니다. 이 함수는 프로그램이 시작될 때 자동으로 호출되며, 주로 하드웨어 초기화나 설정을 담당합니다.
void setup() {
// 매트릭스 전원 켜기
lc.shutdown(0, false);
// 밝기 설정 (0~15)
lc.setIntensity(0, 15);
// 디스플레이 초기화
lc.clearDisplay(0);
}
1. 매트릭스 전원 켜기
lc.shutdown(0, false);
lc.shutdown(0, false);는 LED 매트릭스의 전원을 켜는 명령입니다. 기본적으로 매트릭스는 비활성화 상태로 시작하므로, 이 함수를 호출하여 활성화해야만 LED를 제어할 수 있습니다.
파라미터 설명:
- 첫 번째 인자 0: 활성화할 매트릭스 번호를 나타냅니다. 대부분의 경우 0번 매트릭스를 사용합니다.
- 두 번째 인자 false: 논리값으로, false는 매트릭스를 활성화(전원을 켠다는 의미)합니다. 반대로 true는 매트릭스를 비활성화(전원을 끈다는 의미)합니다.
기능:
- 이 함수는 LED 매트릭스의 전원을 켜거나 끄는 역할을 합니다. false를 전달하면 매트릭스를 활성화하여 LED를 켤 수 있게 만들고, true를 전달하면 매트릭스를 비활성화하여 모든 LED가 꺼지게 만듭니다.
- 기본적으로 매트릭스는 비활성화 상태로 시작하므로, 이 함수를 호출하여 활성화해야만 LED를 제어할 수 있습니다.
사용 시점:
- 보통 setup() 함수 내에서 초기화 과정의 일부로 호출됩니다. 이렇게 함으로써 매트릭스를 활성화하고, 이후에 LED를 켜거나 끄는 등의 작업을 할 수 있게 됩니다.
2. 왼쪽 하단 첫 번째 LED를 반짝게 하기
void loop() {
// 왼쪽 하단 첫 번째 LED의 위치 (행 0, 열 0)
int row = 0;
int col = 0;
while(true) {
lc.setLed(0, row, col, true); // LED 켜기
delay(500); // 0.5초 대기
lc.setLed(0, row, col, false); // LED 끄기
delay(500); // 0.5초 대기
}
}
MAX7219CNG LED 매트릭스에서 특정 LED를 깜박이게 만드는 코드입니다. 이 코드는 loop() 함수 내에 있으며, LED 매트릭스의 왼쪽 하단 첫 번째 LED를 반복적으로 켜고 끄는 동작을 수행합니다.
1) 변수 선언:
// 왼쪽 하단 첫 번째 LED의 위치 (행 0, 열 0)
int row = 0;
int col = 0;
row와 col 변수는 LED의 위치를 지정합니다.
- row = 0: 행 번호로, 0은 가장 위쪽 행을 의미합니다.
- col = 0: 열 번호로, 0은 가장 왼쪽 열을 의미합니다.
따라서 (row, col) = (0, 0)은 매트릭스의 왼쪽 하단 첫 번째 LED를 가리킵니다.
2) LED 동작 :
while(true) {
lc.setLed(0, row, col, true); // LED 켜기
delay(500); // 0.5초 대기
lc.setLed(0, row, col, false); // LED 끄기
delay(500); // 0.5초 대기
}
}
while(true)는 무한 루프를 생성합니다. 이 루프는 프로그램이 종료될 때까지 계속 반복됩니다. 이 루프 내에서 LED를 켜고 끄는 동작이 반복됩니다.
lc.setLed(0, row, col, true);는 지정된 위치의 LED를 켜는 함수입니다.
- 0: 활성화할 매트릭스 번호입니다.
- row: 행 번호 (여기서는 0).
- col: 열 번호 (여기서는 0).
- true: LED를 켜라는 명령입니다.
delay(500);는 0.5초 동안 대기합니다. 이 시간 동안 LED가 켜진 상태가 유지됩니다.
응용 : 화살표 표시
#include "LedControl.h"
// LedControl 객체 생성: (DIN 핀, CLK 핀, CS 핀, 디바이스 수)
LedControl lc = LedControl(12, 11, 10, 1);
// 위로 향하는 화살표 패턴 (8x8 매트릭스, 각 행은 1바이트)
byte arrowUp[8] = {
B00011000, // Row0: 화살표 머리
B00111100, // Row1: 화살표 머리
B01111110, // Row2: 화살표 머리
B00011000, // Row3: 화살표 몸통
B00011000, // Row4: 화살표 몸통
B00011000, // Row5: 화살표 몸통
B00011000, // Row6: 화살표 몸통
B00011000 // Row7: 화살표 몸통
};
void setup() {
lc.shutdown(0, false); // 디스플레이 켜기
lc.setIntensity(0, 8); // 밝기 설정 (0~15, 8은 중간 밝기)
lc.clearDisplay(0); // 화면 지우기
}
void loop() {
// 화살표 패턴 표시
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, arrowUp[row]); // 각 행에 패턴 설정
}
delay(1000); // 1초 대기 (필요에 따라 조정)
}
회사표 오른쪽으로 90도 회전
#include "LedControl.h"
// LedControl 객체 생성: (DIN 핀, CLK 핀, CS 핀, 디바이스 수)
LedControl lc = LedControl(12, 11, 10, 1);
// 오른쪽으로 90도 회전한 화살표 패턴 (8x8 매트릭스, 각 행은 1바이트)
byte arrowRight[8] = {
B00000000, // Row0
B00000100, // Row1
B00000110, // Row2
B11111111, // Row3
B11111111, // Row4
B00000110, // Row5
B00000100, // Row6
B00000000 // Row7
};
void setup() {
lc.shutdown(0, false); // 디스플레이 켜기
lc.setIntensity(0, 8); // 밝기 설정 (0~15, 8은 중간 밝기)
lc.clearDisplay(0); // 화면 지우기
}
void loop() {
// 회전된 화살표 패턴 표시
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, arrowRight[row]); // 각 행에 패턴 설정
}
delay(1000); // 1초 대기 (필요에 따라 조정)
}
깜박이게 하기
void loop() {
// 회전된 화살표 패턴 표시
for (int row = 0; row < 8; row++) {
lc.setRow(0, row, arrowRight[row]); // 각 행에 패턴 설정
}
delay(500); // 1초 대기 (필요에 따라 조정)
// 디스플레이 지우기
lc.clearDisplay(0); delay(500); // 0.5초 동안 꺼짐 }
}
by korealionkk@gmail.com

'★ 아두이노' 카테고리의 다른 글
| 아두이노 호환 보드 & MAX7219CNG #3 (0) | 2025.09.22 |
|---|---|
| 아두이노 호환 보드 & MAX7219CNG #2 (0) | 2025.09.21 |
| ESP32-WROOM-32] Wifi 설정 (0) | 2025.09.17 |
| ESP32-WROOM-32] 보드 설정 (0) | 2025.09.17 |
| LED 8x8] LED 8X8 Matrix Display #1 (0) | 2025.09.07 |