순번 부품명 수량 1 MDF 판 6장 2 고무마개 12EA 3 아두이노 나노 1개 4 브레드 보드 1개 5 푸쉬 버튼 2EA 6 8×8 도트 매트릭스 1개 7 아두이노 나노 케이블 1
8×8 도트 매트릭스 설명 : 8×8 도트 매트릭스는 아두이노와 같은 마이크로컨트롤러를 이용하여 다양한 시각적인 출력을 만들기 위해 사용되는 디지털 디스플레이입니다. 이러한 도트 매트릭스는 8개의 열과 8개의 행으로 구성되어 있으며, 각 행과 열의 교차점에는 LED가 있어서 총 64개의 LED로 구성됩니다. 8×8 도트 매트릭스는 다양한 프로젝트에 활용될 수 있으며, 주로 아래와 같은 목적으로 사용됩니다:
텍스트 표시 : 간단한 메시지나 숫자를 표시할 수 있습니다. 이를 통해 시간, 온도, 습도 등의 정보를 표시할 수 있습니다.
그래픽 표시 : 간단한 그래픽 패턴이나 아이콘을 표시할 수 있습니다. 이를 통해 게임, 시각적 효과 등을 구현할 수 있습니다.
애니메이션 표시 : 여러 개의 이미지를 연속적으로 표시하여 애니메이션을 만들어낼 수 있습니다.
시각적 응용 프로그램 : 빛 감지, 움직임 감지, 음향 등과 연계하여 다양한 시각적 응용 프로그램을 구현할 수 있습니다.
아두이노와 8×8 도트 매트릭스를 함께 사용할 때는 주로 LED를 켜고 끄는 방법을 제어하기 위해 특정 라이브러리를 사용합니다. 대표적으로는 Adafruit의 MAX7219 라이브러리나 LedControl 라이브러리 등이 있습니다. 이러한 라이브러리를 사용하면 간단한 코드로도 도트 매트릭스를 제어할 수 있습니다.
코드 : 소스코드는 아래와 같은데 도트 매트릭스를 사용하기 위한 라이브러리를 다운로드 받아야합니다. 아두이노의 라이브러리 매니저를 이용해서 다운받도록 합시다. 라이브러리명 : LedControl by Eberhard Fahle
#include "LedControl.h" //dot matrix를 사용하기 위한 라이브러리 호출
#define dataIn 12 //DIN 12번 핀으로 사용
#define cs 11 //CS 11번 핀으로 사용
#define clk 10 //CLK 10번 핀으로 사용
#define Player1 4 //button 핀번호
#define Player2 6 //button 핀번호
LedControl lc = LedControl(dataIn, clk, cs, 1); //LedControl('DIN핀 번호', 'CLK핀 번호', 'CS핀 번호', 'dot matrix 갯수')
bool stateCheck = 0;
bool Matrix_off[8][8] = {
0,
};
bool MatrixInput_1[8][8] = {
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 0, 1, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 1, 0, 0, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 1 }
};
bool MatrixInput_2[8][8] = {
{ 0, 0, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 0, 0, 0, 0, 1, 0 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 1, 0, 0, 0, 0, 0, 0, 1 },
{ 0, 1, 0, 0, 0, 0, 1, 0 },
{ 0, 0, 1, 1, 1, 1, 0, 0 }
};
bool MatrixInput_3[8][8] = {
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 1, 1, 1, 1, 1, 1, 0 },
{ 0, 0, 1, 1, 1, 1, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 }
};
bool MatrixInput_4[8][8] = {
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 1, 1, 1, 1, 0, 0 },
{ 0, 1, 1, 1, 1, 1, 1, 0 },
{ 1, 1, 1, 1, 1, 1, 1, 1 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 },
{ 0, 0, 0, 1, 1, 0, 0, 0 }
};
bool btnFlg1 = 0;
bool btnFlg2 = 0;
int btn1Chk() {
if (digitalRead(Player1) == 0) {
btnFlg1 = 1;
return 0;
}
if (btnFlg1 == 1) {
btnFlg1 = 0;
return 1;
}
return 0;
}
int btn2Chk() {
if (digitalRead(Player2) == 0) {
btnFlg2 = 1;
return 0;
}
if (btnFlg2 == 1) {
btnFlg2 = 0;
return 1;
}
return 0;
}
void MatrixLoop(bool matinput[8][8]) {
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
lc.setLed(0, i, j, matinput[i][j]);
}
}
}
void setupfunc() {
MatrixLoop(MatrixInput_1);
randomSeed(analogRead(0));
int randomTime = random(3, 6);
delay(randomTime * 1000);
MatrixLoop(MatrixInput_2);
}
void setup() {
pinMode(Player1, INPUT_PULLUP);
pinMode(Player2, INPUT_PULLUP);
lc.shutdown(0, false); //dot matrix를 깨우는 코드. shutdown('지정할 dotmatrix의 주소', 'false : 깨우기')
lc.setIntensity(0, 8); //밝기 설정. setIntensity('지정할 dotmatrix의 주소','밝기값(0~15)')
lc.clearDisplay(0); //사용하기 전 초기화. clearDisplay('지정할 dotmatrix의 주소')
}
void loop() {
if (stateCheck == 1) {
if (btn1Chk() == 1) {
btnFlg2 = 0;
MatrixLoop(MatrixInput_3);
delay(1500);
MatrixLoop(Matrix_off);
stateCheck = 0;
} else if (btn2Chk() == 1) {
btnFlg1 = 0;
MatrixLoop(MatrixInput_4);
delay(1500);
MatrixLoop(Matrix_off);
stateCheck = 0;
}
} else if (stateCheck == 0) {
if (btn1Chk() == 1 || btn2Chk() == 1) {
setupfunc();
stateCheck = 1;
}
}
delay(1);
}
답글 남기기