8×8 Dot LED Matrix (MAX7219)
1. 8×8 Dot LED Matrix (MAX7219)
8×8 LED Matrix로 글자와 이미지 출력에 이용합니다. 모듈을 여러개 일렬로 연결해서 사용하면 LED Matrix 전광판 처럼 사용할 수도 있습니다. 비교적 저렴한 가격도 장점.
LED Matrix 와 구동칩인 MAX7219 및 필요한 회로 부품들을 DIY 킷 형태로 팔기도 하고, 모두 조립된 형태로 팔기도 합니다. 사용되는 부품은 아래를 참고하세요.
- 1x PCB board
- 2x 5P bent pin single row pin
- 1x 24P IC socket
- The 1x Inline MAX7219 chip
- 1x 10uF electrolytic capacitor
- 1x 0.1uF ceramic capacitor
- 1x 10K resistor
- 2 Block 2x 8P round hole (pitch 2.54mm)
- 1x 3mm 8 * 8 common cathode red dot
직접 DIY하는 과정은 [링크]의 내용을 참고하시면 됩니다.
2. 연결방법
여기서는 1개의 모듈만을 사용합니다. MAX7219 칩이 있는 쪽 5개 핀을 이용하시면 됩니다. 반대쪽 핀들은 LED Matrix를 여러개 연결해서 하나처럼 동작시킬 때 사용합니다.
LED Matrix Arduino
VCC 5V
GND GND
DIN D12
CS D10
CLK D11
아두이노와 MAX7219 칩간 통신을 위해 SPI 인터페이스를 사용합니다. 해외 포럼을 보니 위와 같이 사용하는게 일반적이네요. [링크] 참고
- Pins 10-11-12 is bitbanging. (SS-MOSI-MISO)
- Pins 10-11-13 are needed for actual SPI. (SS-MOSI-SCK)
3. 소스코드 (스케치)
먼저 LedControlMS 라이브러리를 설치해야 합니다. [링크]를 참고하셔서 라이브러리를 설치하세요.
라이브러리에 포함되어 있는 예제는 좀 부실해서… 아래 링크에 있는 예제를 사용하세요. LED 매트릭스를 제어하기 위한 각종 코드를 충실히 담고 있습니다. 소스가 길기 때문에 여기서는 중요한 부분만 발췌해 보겠습니다.
예제 스케치를 살펴보면 먼저 클래스 인스턴스를 하나 생성하는데, 이 때 LED 매트릭스가 연결된 디지털 핀 넘버를 지정해줘야 합니다.
LedControl lc=LedControl(12,11,10,1);
- pin 12 –> DataIn
- pin 11 –> CLK
- pin 10 –> CS
setup() 초기화 코드를 보면 LED 매트릭스 초기화를 합니다.
void setup() { lc.shutdown(0,false); lc.setIntensity(0,8); lc.clearDisplay(0); }
위 코드를 그대로 사용하면 됩니다. lc.setIntensity(0,8); 함수는 LED 매트릭스의 밝기를 조절하는 함수입니다. 0은 LED 매트릭스 넘버 (아두이노와 가까운 매트릭스부터 0, 1, …, n) 두 번째 숫자 8 은 밝기를 의미합니다. 밝기는 숫자가 작을수록 어둡습니다.
이후 setup() 함수 안에서 LED 조작하는 각종 방법이 나옵니다. 아래 함수들을 이용해서 LED 조작이 가능합니다.
- lc.setLed(0,0,0,true); // 0번 모듈, X-Y 좌표 (0, 0) LED on
- lc.setLed(0,7,0,true); // 0번 모듈, X-Y 좌표 (7, 0) LED on
- lc.setRow(0,1,0x0C); // 0번 모듈, row 값이 1인 LED 8개를 1byte 데이터(0x0C = 00001100)로 한번에 제어
- lc.setColumn(0,7,iconHeart[0]); // 0번 모듈, column 값이 7인 LED 8개를 1byte 데이터(iconHeart[0])로 한번에 제어
- lc.writeString(0,“Hola Mundo“); // 문자열 출력 함수 (모듈 넘버, 출력할 문자열)
- lc.clearAll(); // 모든 LED off
아래 그림처럼 row, column 을 X, Y 좌표처럼 생각하면 됩니다. 좌표의 시작점 (0,0)은 좌측 아래입니다.
loop() 함수 안에서는 특정 ASCII 문자 하나를 표시할 때 어떻게 가능한지 보여줍니다.
- lc.displayChar(0, lc.getCharArrayPosition(ch)); // 0번 모듈에 ch 에 저장된 아스키 문자를 출력