도트 매트릭스 사용하기
1. 도트 매트릭스
8x8 도트 매트릭스는 총 64개의 LED가 총 16개의 선으로 연결되어 있는 장치이다.
64개의 LED를 제어하기 위해서 행과 열이 8개의 LED에 +극과 -극으로 연결되어 있다. 마찬가지로 LED의 극성 연결에 따라서 A타입 B타입으로 나뉜다.
위 처럼 1,6 지점의 LED를 켜기 위해서는 Row1과 Col6을 극성에 맞는 값을 인가해야 한다.
내가 사용중인 1088BS는 아래와 같이 구성되어 있다.
2. 매트릭스 연결 방법
아두이노에는 아날로그 핀 6개와 디지털핀 14개가 있다. 총 16개의 핀이 필요하므로 우리는 아날로그 핀2개와 디지털 핀 14개를 쓰면된다. 여기서 아날로그 핀은 디지털 핀처럼 쓸 수있다. 다만 특정보드에서는 제약 사항이 있으므로 확인이 필요하다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
Row 핀 | 9 | 14 | 8 | 12 | 1 | 7 | 2 | 5 |
GPIO 할당 | A4 | A5 | 0 | 1 | 2 | 3 | 4 | 5 |
Col 핀 | 13 | 3 | 4 | 10 | 6 | 11 | 15 | 16 |
GPIO 할당 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
3. 소스코드
int rows[8] = {6,11,5,9,A4,4,A5,2};
int cols[8] = {10,0,1,7,3,8,12,13};
// 매트릭스 출력
int matrix[8]={
0b00011000,
0b00100100,
0b00100100,
0b01000010,
0b11111111,
0b10000001,
0b10000001,
0b10000001
};
// 핀모드 출력 설정
// 매트릭스 초기화
void setup() {
for(int i=0; i<8; i++){
pinMode(rows[i], OUTPUT);
pinMode(cols[i], OUTPUT);
digitalWrite(rows[i], false);
digitalWrite(cols[i], true);
}
}
void display(){
// Row 단위로 출력
for(int i=0; i<8; i++){
// 선택한 Row에 전원 인가
digitalWrite(rows[i], HIGH);
// 컬럼별로 전원 인가
// col은 GND 인가시 LED를 켠다.
// bitRead는 value에서 j번째 비트 값을 가져온다.
for(int j=0; j<8; j++)
digitalWrite(cols[j], !bitRead(matrix[i],j));
// 모든 컬럼 전원을 끈다.
// 끄지 않는 경우, 이번 행의 Column이
// 다음 Row에 enable되어 있는 상태이기 때문에 LED가 잠깐 들어온다.
for(int j=0; j<8; j++)
digitalWrite(cols[j], HIGH);
digitalWrite(rows[i], LOW);
}
}
void loop() {
display();
}
'라즈베리파이, 아두이노' 카테고리의 다른 글
[간단한 아두이노 코딩] 16. 릴레이 사용하기 (0) | 2020.11.24 |
---|---|
[간단한 아두이노 코딩] 15. 16x2 캐릭터 LCD 사용하기(LCM1602A) (0) | 2020.11.24 |
[간단한 아두이노 코딩] 13. 적외선 센서 & 리모컨 사용하기 (0) | 2020.11.24 |
[간단한 아두이노 코딩] 12. 스텝 모터 드라이버(DM741, ULN2003) 사용하기 (0) | 2020.11.24 |
[간단한 아두이노 코딩] 11. 피에조 부저 사용하기 + 젓가락 행진곡 (0) | 2020.11.24 |