코드

아래 코드는 ‘ㄱ’, ‘ㄴ’, ‘ㄷ’이 빈칸으로 설정되어 있는 코드입니다. 여러분들이 아래 링크에서 변환해서 직접 코드를 완성해보기 바랍니다.

https://www.riyas.org/2013/12/online-led-matrix-font-generator-with.html

주의할 점은 도트매트릭스의 정방향과 실제 사용하는 방향이 다르니 그 점을 고려하여 패턴을 만들어야합니다.

#include "LedControl.h"
LedControl lc = LedControl(12,11,10,3); //DIN을 12번핀, CLK를 11번핀,
int button =13; //버튼을 13번핀에 연결

byte font_char[][8]=
{
  { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 }, // ㄱ
  { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 }, // ㄴ
  { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000 }, // ㄷ
  { B00000000, B01111010, B01001010, B01001010, B01001010, B01001010, B01001110, B00000000 }, // ㄹ
  { B00000000, B01111110, B01000010, B01000010, B01000010, B01000010, B01111110, B00000000 }, // ㅁ
  { B00000000, B01111110, B01001000, B01001000, B01001000, B01001000, B01111110, B00000000 }, // ㅂ
  { B00000000, B01000000, B00100000, B00010000, B00011110, B00100000, B01000000, B00000000 }, // ㅅ
  { B00000000, B00111100, B01000010, B01000010, B01000010, B01000010, B00111100, B00000000 }, // ㅇ
  { B00000000, B01000010, B00100010, B00010010, B00011010, B00100110, B01000010, B00000000 }, // ㅈ
  { B00000000, B01000100, B00100100, B00010110, B00011110, B00100100, B01000100, B00000000 }, // ㅊ
  { B00000000, B00010010, B00010010, B00010010, B00010010, B00010010, B01111110, B00000000 }, // ㅋ
  { B00000000, B01111110, B01001010, B01001010, B01001010, B01001010, B01001010, B00000000 }, // ㅌ
  { B00000000, B01000010, B01111110, B01000010, B01000010, B01111110, B01000010, B00000000 }, // ㅍ
  { B00000000, B00110100, B01001100, B01001110, B01001110, B01001100, B00110100, B00000000 }, // ㅎ
  { B00000000, B00000000, B10010010, B10010010, B10010010, B01101100, B00000000, B00000000 }, // 1
  { B00000000, B10000100, B11000010, B10100010, B10010010, B10001100, B00000000, B00000000 }, // 2
  { B00000000, B10000100, B10000010, B11111110, B10000000, B10000000, B00000000, B00000000 }, // 3
};

void setup() {
for(int num = 0; num < 3; num++){
lc.shutdown(num,false); //num번 장치의 대기모드를 해제, 초기화
lc.setIntensity(num,1); //num번 장치의 밝기조절(0~15)
lc.clearDisplay(num); //num번 장치의 LED를 다 끄기
}
randomSeed(analogRead(0));
pinMode(button,INPUT); //버튼
}
void display_char(int num, int col){ //num번 장치에 col번째 행 글자 모
for (int i = 0; i < 8; i++)
{
lc.setRow(num, i, font_char[col][i]); //num번째 장치의 i번째 줄
}
}

void loop() {
if (digitalRead(button) == HIGH){ //버튼이 눌러지면
lc.clearDisplay(0); //0번 장치의 LED 끄기
lc.clearDisplay(1); //1번 장치의 LED 끄기
lc.clearDisplay(2); //2번 장치의 LED 끄기
display_char(1,14); //1번 모듈에 '3'을 출력
delay(500);
display_char(1,15); //1번 모듈에 '2'을 출력
delay(500);
display_char(1,16); //1번 모듈에 '1'을 출력
delay(500);
int rand=random(14); //random(max), 0부터 (max-1) 사이의 난수
int rand2=random(14);
int rand3=random(14);
if(rand%2==0) { //변수 rand가 짝수이면 자음 3개 게임
display_char(0,rand); //0번 모듈에 rand번 char를 출력
display_char(1,rand2); //1번 모듈에 rand2번 char를 출력
display_char(2,rand3); //2번 모듈에 rand3번 char를 출력
// delay(10000);

}
else { //변수 rand가 홀수이면 자음 2개 게임
lc.clearDisplay(0); //0번 장치의 LED 끄기
lc.clearDisplay(1); //1번 장치의 LED 끄기
lc.clearDisplay(2); //2번 장치의 LED 끄기
display_char(0,rand); //0번 모듈에 0번 char를 출력
display_char(1,rand2); //1번 모듈에 0번 char를 출력
}
}
}
전체코드 보기

전체 코드

#include "LedControl.h"
LedControl lc = LedControl(12,11,10,3); //DIN을 12번핀, CLK를 11번핀,
int button =13; //버튼을 13번핀에 연결

byte font_char[][8]=
{
  { B00000000, B00000010, B00000010, B00000010, B00000010, B00000010, B01111110, B00000000 },
  { B00000000, B01111110, B01000000, B01000000, B01000000, B01000000, B01000000, B00000000 },
  { B00000000, B01111110, B01000010, B01000010, B01000010, B01000010, B01000010, B00000000 },
  { B00000000, B01111010, B01001010, B01001010, B01001010, B01001010, B01001110, B00000000 },
  { B00000000, B01111110, B01000010, B01000010, B01000010, B01000010, B01111110, B00000000 },
  { B00000000, B01111110, B01001000, B01001000, B01001000, B01001000, B01111110, B00000000 },
  { B00000000, B01000000, B00100000, B00010000, B00011110, B00100000, B01000000, B00000000 },
  { B00000000, B00111100, B01000010, B01000010, B01000010, B01000010, B00111100, B00000000 },
  { B00000000, B01000010, B00100010, B00010010, B00011010, B00100110, B01000010, B00000000 },
  { B00000000, B01000100, B00100100, B00010110, B00011110, B00100100, B01000100, B00000000 },
  { B00000000, B00010010, B00010010, B00010010, B00010010, B00010010, B01111110, B00000000 },
  { B00000000, B01111110, B01001010, B01001010, B01001010, B01001010, B01001010, B00000000 },
  { B00000000, B01000010, B01111110, B01000010, B01000010, B01111110, B01000010, B00000000 },
  { B00000000, B00110100, B01001100, B01001110, B01001110, B01001100, B00110100, B00000000 },
  { B00000000, B00000000, B10010010, B10010010, B10010010, B01101100, B00000000, B00000000 },
  { B00000000, B10000100, B11000010, B10100010, B10010010, B10001100, B00000000, B00000000 },
  { B00000000, B10000100, B10000010, B11111110, B10000000, B10000000, B00000000, B00000000 },
};

void setup() {
for(int num = 0; num < 3; num++){
lc.shutdown(num,false); //num번 장치의 대기모드를 해제, 초기화
lc.setIntensity(num,1); //num번 장치의 밝기조절(0~15)
lc.clearDisplay(num); //num번 장치의 LED를 다 끄기
}
randomSeed(analogRead(0));
pinMode(button,INPUT); //버튼
}
void display_char(int num, int col){ //num번 장치에 col번째 행 글자 모
for (int i = 0; i < 8; i++)
{
lc.setRow(num, i, font_char[col][i]); //num번째 장치의 i번째 줄
}
}

void loop() {
if (digitalRead(button) == HIGH){ //버튼이 눌러지면
lc.clearDisplay(0); //0번 장치의 LED 끄기
lc.clearDisplay(1); //1번 장치의 LED 끄기
lc.clearDisplay(2); //2번 장치의 LED 끄기
display_char(1,14); //1번 모듈에 '3'을 출력
delay(500);
display_char(1,15); //1번 모듈에 '2'을 출력
delay(500);
display_char(1,16); //1번 모듈에 '1'을 출력
delay(500);
int rand=random(14); //random(max), 0부터 (max-1) 사이의 난수
int rand2=random(14);
int rand3=random(14);
if(rand%2==0) { //변수 rand가 짝수이면 자음 3개 게임
display_char(0,rand); //0번 모듈에 rand번 char를 출력
display_char(1,rand2); //1번 모듈에 rand2번 char를 출력
display_char(2,rand3); //2번 모듈에 rand3번 char를 출력
// delay(10000);

}
else { //변수 rand가 홀수이면 자음 2개 게임
lc.clearDisplay(0); //0번 장치의 LED 끄기
lc.clearDisplay(1); //1번 장치의 LED 끄기
lc.clearDisplay(2); //2번 장치의 LED 끄기
display_char(0,rand); //0번 모듈에 0번 char를 출력
display_char(1,rand2); //1번 모듈에 0번 char를 출력
}
}
}

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다