보통 사용하시는 아두이노의 디지털 핀 이 나노나 우노라면 보통 14개입니다.(나머지는 핀 수가 많아지다 보니 덩치가..)
처음에 LED로 문자를 만들어 볼까 했을 때 14개 핀으로는 별로 쓸 수 있는 문자가 없어서 사용하게 된 게 도트 매트릭스입니다.
-도트매트릭스란
이번에 사용할 도트 매트릭스는 8X8이지만 굉장히 여러 가지 크기가 판매되고 있습니다.
모듈 여러 개를 붙여서 사용할 수도 있습니다.
먼저 8X8 도트 매트릭스의 회로도를 보겠습니다.
64개의 LED를 작동시키기 위해 MAX7219를 사용하여 결과적으로 아두이노는 3핀만으로 작동할 수 있게 해 줍니다.
MAX7219는 (8x8 도트 매트릭스 기준)
PIN | 이름 | 설명 |
1 | DIN | 데이터 입력핀 |
2,3,5,6,7,8,10,11 | DIG | 매트릭스의 열 |
4,9 | GND | 그라운드 |
12 | LOAD(CS) | 칩 선택 핀(여러개의 도트매트릭스 모듈 사용시) |
13 | CLK | 클럭 입력 핀 |
14,15,16,17,20,21,22,23 | SEG | 매트릭스의 행 |
18 | ISET | 저항을 이용한 최대 전류설정(보류) |
19 | V+ | VCC전원 |
24 | DOUT | 데이터 출력(모듈 여러개 사용시 |
-아두이노와의 회로도 구성
-코드
여러 가지 라이브러리가 있지만
LedControl를 사용하도록 하겠습니다.
기본적으로 있기도 하고 없으시면 라이브러리 관리에서 검색하면 받을 수 있습니다.
-LedControl name =LedControl(int DIN, int CLK, int CS, int Device);
아두이노에 연결된 DIN, CLK, CS를 입력하고 Device에 연결되어있는 매트릭스의 개수를 입력
-name.shutdown(int addr, boolean state);
절전모드를 제어하는 함수
addr = 연결된 매트릭스의 주소 (0번째부터 시작)
true를 주면 절전모드로 들어가 모듈이 Off
false를 주면 절전모드가 해제되고 모듈이 On
-name.setIntensity(int addr, int brightness);
addr = 연결된 매트릭스의 주소 (0번째 부터 시작)
brightness = 매트릭스의 밝기 조절 0~15까지 가능
-name.clearDisplay(int addr);
addr = 연결된 매트릭스의 주소 (0번째 부터 시작)
지정된 매트릭스를 초기화
-name.setLed(int addr, int row, int col, boolean state);
n번째 매트릭스, LED 행, LED 열, LED 상태 = LED 1개를 제어(행과 열은 0부터 시작)
ex)
#include "LedControl.h"
LedControl dot =LedControl(12,11,10,1);
void setup() {
dot.shutdown(0,false);
dot.setIntensity(0,5);
dot.clearDisplay(0);
dot.setLed(0, 0, 0, true);
}
void loop() {
}
-name.setRow(int addr, int row, byte value)
n번째 매트릭스, n번째 행, byte값으로 led제어
ex)
#include "LedControl.h"
LedControl dot =LedControl(12,11,10,1);
void setup() {
dot.shutdown(0,false);
dot.setIntensity(0,5);
dot.clearDisplay(0);
dot.setRow(0,1,B11111111);
}
void loop() {
}
-name.setRow(int addr, int column, byte value)
n번째 매트릭스, n번째 열, byte값으로 led제어
ex)
#include "LedControl.h"
LedControl dot =LedControl(12,11,10,1);
void setup() {
dot.shutdown(0,false);
dot.setIntensity(0,5);
dot.clearDisplay(0);
dot.setColumn(0,1,B11111111);
}
void loop() {
}
-응용 움직이는 하트 만들기
#include <LedControl.h>
LedControl dot =LedControl(12,11,10,1);
byte heart[]={
B01101100,
B11111110,
B11111110,
B11111110,
B01111100,
B00111000,
B00010000,
B00000000
};
void setup() {
dot.shutdown(0,false);
dot.setIntensity(0,5);
dot.clearDisplay(0);
}
void loop() {
// put your main code here, to run repeatedly:
dotmatrix();
delay(200);
}
void dotmatrix(){
for(int i=0;i<8;i++){
dot.setRow(0,i,heart[i]);
}
for(int i=0;i<8;i++){
if((heart[i]& 0b10000000)>0){
heart[i]=heart[i]<<1;
heart[i]+=B00000001;
}
else{
heart[i]=heart[i]<<1;
}
}
}
배열을 사용하여 하트 모양으로 byte값을 입력
'<<' 시프트를 사용하여 하트를 움직이게 만듦
'공부 자료실 > 아두이노' 카테고리의 다른 글
다양하게 아두이노 활용하기 (0) | 2024.10.19 |
---|---|
아두이노 - 적외선 센서를 이용한 라인트레이서(Linetracer) 만들기 (0) | 2019.05.29 |
댓글