LCD 한글 입력해보기
아두이노 에서 기본적으로 사용하는 캐릭터 LCD는 영어와 숫자만 지원.
이전 페이지와 동일한 준비물과 브레드보드레이아웃으로 연결해줍니다-!
한글 Byte 가져오기
기본 캐릭터LCD는 한 블럭에 dot이 5X8로 구성되어 있습니다. 아두이노는 기본적인 영문과 숫자를 LiquidCrystal 라이브러리에서 지원을 해주지만 밑의 그림과 같이 이모티콘이나 한글, 문자등을 표시해 주기 위해서는 이미지를 2진화해서 출력을 해줘야 합니다.(일반 캐릭터LCD는 1블럭당 dot이 5X8밖에 되지 않기 때문에 복잡한 문자는 표현할수가 없습니다.)
문자를 출력을 하기 위해서 매번 계산을 하기가 힘들어서 이를 지원해주는 프로그램(or 웹상)을 이용하여 자신이 원하는 모양의 문자나 이미지를 만들어 Byte배열로 바꿔주고 있습니다.
우선 5X8 Custom Character Set 프로그램을 이용하여 원하는 문자를 Byte 배열로 바꿔보겠습니다
자신이 원하는 문자를 그린 후 옆에 라디오버튼 박스에 Arduino Liquid Crystal Lib 을 선택하시면 그 옆에 빈 공간에 아두이노 소스 코드가 나옵니다.
나온 아두이노 소스 코드를 보시면 위로 올리면 위의 byte 배열이 나옵니다. 왼쪽 위에 문자를 그리는 부분 밑에 보시면 Char#부분이 7개로 되있는 페이지를 이동 할 수 있습니다. 소스코드를 보시면 SpecialChar0 라는 이름의 배열이 쭉 나열되있는데 마지막에 숫자가 Character Set의 번호 입니다.
웹상에서 하실 분은 http://mikeyancey.com/hamcalc/lcd_characters.php 에 접속하시면 밑의 같은 화면이 나옵니다. 왼쪽 5X8 이미지에 자신이 원하는 문자를 그리면 오른쪽에 5x8 바이트 배열이 나옵니다.(옆에 나오는 소스 코드는 그대로 사용하셔도 됩니다. 하지만 문자 하나만 출력이 됩니다.)
이렇게 한 블럭에 해당하는 BYTE 배열을 구하면 아두이노 소스 코드 위쪽에 넣어 줍니다.(setup함수 위에 배열 전부를 넣어 주시면 됩니다.)
그 다음은 밑의 코드와 같이 createChar(byte번호, byte배열) 함수를 이용하여 Byte배열을 문자로 저장하고 write(byte(byte번호)) 를 이용하면 한 블럭에 5X8 배열을 출력해 줍니다.
code
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//n1 thru n6 are you pin numbers
//n1=rs n2=enable n3-n6=d4-d7
//Custom Character #0 hee
byte SpecialChar2[8] = {
B01001,
B11101,
B01001,
B10101,
B01001,
B00001,
B11101,
B00000
};
//Custom Character #1
byte SpecialChar3[8] = {
B01110,
B01000,
B01110,
B00100,
B11111,
B00000,
B01110,
B00100
};
//Custom Character #2 min
byte SpecialChar0[8] = {
B00001,
B11101,
B10101,
B11101,
B00001,
B01001,
B01000,
B01111
};
//Custom Character #3 ji
byte SpecialChar1[8] = {
B00001,
B11101,
B01001,
B10101,
B10101,
B00001,
B00001,
B00000
};
//Custom Character #4 jung
byte SpecialChar4[8] = {
B00001,
B11101,
B01011,
B10101,
B00001,
B00100,
B01010,
B00100
};
//Custom Character #5 sik
byte SpecialChar5[8] = {
B01001,
B11101,
B10101,
B10101,
B00001,
B01110,
B00010,
B00010
};
//Custom Character #6 kyo
byte SpecialChar6[8] = {
B11111,
B00001,
B00001,
B00000,
B01010,
B01010,
B01010,
B11111
};
//Custom Character #7 bin
byte SpecialChar7[8] = {
B10101,
B11101,
B10101,
B11101,
B00001,
B01000,
B01000,
B01111
};
//Custom Character #8 hee
byte SpecialChar8[8] = {
B01001,
B11101,
B01001,
B10101,
B01001,
B00001,
B11101,
B00000
};
//Custom Character #9 jin
byte SpecialChar9[8] = {
B11101,
B01001,
B10101,
B10101,
B00001,
B01000,
B01000,
B01111
};
byte SpecialChar10[8] = {
B00000,
B01010,
B11111,
B11111,
B11111,
B01110,
B01110,
B00100
};
void setup() {
lcd.clear();
//lcd.print("HD");
lcd.createChar(0, SpecialChar0);
lcd.createChar(1, SpecialChar1);
lcd.createChar(2, SpecialChar2);
lcd.createChar(3, SpecialChar3);
lcd.createChar(4, SpecialChar4);
lcd.createChar(5, SpecialChar5);
lcd.createChar(6, SpecialChar8);
lcd.createChar(7, SpecialChar9);
lcd.createChar(8, SpecialChar6);
lcd.createChar(9, SpecialChar7);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.write(byte(0));
lcd.write(byte(1));
lcd.write(byte(2));
lcd.write(byte(3));
lcd.write(byte(4));
lcd.write(byte(5));
lcd.write(byte(6));
lcd.write(byte(7));
/* lcd.write(byte(8));
lcd.write(byte(9));
*/
// where CC is # of columns, RR is # of rows
}
void loop() {}