#include <Adafruit_GFX.h> // TFT LCD 사용을 위해 그냥 Copy하여 사용할 코드들 입니다. #include <UTFTGLUE.h> #define _TFTLCD LcdName // LcdName을 원하시는 이름으로 변경 하시면 됩니다. UTFTGLUE myGLCD(0x9488,A2,A1,A3,A4,A0); ///////////////////// TFT |
|
#define cBLACK #define cWHITE #define cRED #define cGREEN #define cBLUE #define cSILVER #define cGRAY #define cMAROON #define cYELLOW #define cOLIVE #define cLIME #define cAQUA #define cTEAL #define cNAVY #define cFUCHSIA #define cPURPLE #define cTRANSPARENT |
0x0000 // 필요한 색만 copy하시면 ...... 0xFFFF // 문자 줄 맞추기 힘들어 표로 작성 아직도 개선이 안된다는..... 0xF800 0x0400 0x001F 0xC618 0x8410 0x8000 0xFFE0 0x8400 0x07E0 0x07FF 0x0410 0x0010 0xF81F 0x8010 0xFFFFFFFF |
//---- 폰트 만들기 프로그램 ver 1.5 로 만든 코드임------------ struct Font // 폰트구조체 { String s; // 폰트글자 Key값으로 // 이곳은 아두이노 한글폰트 Code 만들기 프로그램으로 unsigned short f[16]; // 폰트 // 만든 Code를 복사하여 사용 하세요. }; Font font[]={ // 한글 코드가 다양해서 그냥 문자로 Key값을 했습니다. 만들때는 UniCode 사용할때는 UTF-8이라서 "나",{ 0x0000, 0x0008, 0x2008, 0x2008, 0x2008, ......................................................, 0x0008, 0x0000 }, : : "한",{ 0x0000, 0x1F08, 0x0008, 0x7FC8, 0x0008, -------------------------------------------, 0x0FF8, 0x0000 } }; // -------폰 트 끝----------------------------------------- |
|
void setDot( int col, int row, int x, int y,int mx,int my) { // (문자좌표)x,y (bit 행열좌표) col,row에 가로 mx개의 점, 세로 my개의 점 그리기 // 시작점 TopLeft 좌표는 x+col*mx y+row*my임 for(int dx=0 ; dx< mx ;dx++) // 사각형의 가로 bit(dot) for( int dy=0;dy<my;dy++) // 사각형의 세로 bit _TFTLCD.drawPixel( x+col*mx+dx ,y+row*my+dy ); } void drawFont(unsigned short font[], int x, int y, int m) { drawFont( font, x, y, m , m, true);} void drawFont(unsigned short font[], int x, int y) { drawFont( font, x, y, 1 , 1, true);} void drawFont(unsigned short font[], int x, int y, int mx ,int my) { drawFont( font, x, y, mx , my, true);} void drawFont(unsigned short font[], int x, int y, int mx , int my, bool Direction) { // x,y에 가로 mx배 세로 my배로 Direction이 true이면 정상 false이면 역상으로 출력 unsigned int buff; for( int row=0; row<16; row++) // 폰트 bit의 행 { if( Direction ) buff=font[row]; else buff=font[15-row]; for(int col=0;col<16;col++) // 폰트 bit의 열 { if( buff & 0b1000000000000000 ) setDot( col, row, x,y, mx, my); buff <<= 1; // 열 , 행 , 가로표시좌표, 세로표시좌표, 가로배율, 세로배율 } } } void printFont( String s, int x, int y ) // 오버로드 함수 { printFont( s, x, y ,1); } void printFont( String s, int x, int y , int m ) // x,y 좌표에 m배로 출력 { _TFTLCD.setTextSize(2*m); for( int p=0; p <s.length() ;p++) { int size=sizeof(font) /sizeof(Font); // font의 갯수를 구함 C#의 length 같은 것이 없어서 // 전체 font의크기 / Font 구조체 사이즈 = font갯수 if( isAscii(s[p]) )//Byte가 ASCII이면(최상위 bit가 0(양수) : 최상위 비트 1 (음수)이면 한글 첫Byte { // 그다음2byte와 3Byte로 한글 UTF-8코드 _TFTLCD.setCursor(x,y); // 참고로 한글 UniCode는 2Byte _TFTLCD.println(s[p]); // 기존 함수로 영문출력 참고로 한극 EUC-KR(CP949)은 2Byte x+=16*m; } else for( int f=0; f < size; f++) // 폰트 수 만큼 검색 if( font[f].s== s.substring(p,p+3) ) // Arduino 스케치는 UTF-8( 한글 3byte ) 사용 { // p, p+1 ,p+2 가 한글 UTF-8코드 drawFont( font[f].f , x, y, m) ; x+=16*m; p+=2; break; } } } //--------------------------------------------------------------------------------------------- void setup() { pinMode(A0, OUTPUT); digitalWrite(A0, HIGH); _TFTLCD.InitLCD(); _TFTLCD.setRotation(3); _TFTLCD.clrScr(); // 아두이노 한글 출력 부분 대충 묶어 복사 _TFTLCD.setColor(cYELLOW); printFont("학교종이 땡땡땡 어서 모이자",5,5); printFont("선생님이 우리를 기다리신다",5,25); printFont("솔솔 부는 봄바람 쌓인 눈 녹이고",5,45); _TFTLCD.setColor(cRED); } void loop() { } |
Uno는 용량이 넘 적어서 / 딱 한글 30자 사용( 참고로 Mega 메모리는 Uno의 4배 )
1~2자 넘어 가면 작동이 이상해지고 더 넘어가면 컴파일 에러 남
Wemos가 용량이 좋은데 쉴드 연결이 안되고....연결 가능한 TFT LCD를 구 하면 될 듯
여기 사용하는 제 TFT LCD는 구형이라 핀이 많이 필요
담에는 SD카드에 폰트를 저장 하여 사용 하는 프로그램으로.. 근데 속도가 문제인데 .....
가급적 같은 글자 사용 ㅎㅎ

'프로젝트 > TFT LCD 한글 출력 (아두이노)' 카테고리의 다른 글
TFT LCD에서 SD카드 한글 출력 인덱스 사용( 속도 빨라짐) (6) (0) | 2022.08.10 |
---|---|
TFT LCD에서 SD카드 한글 출력-많이 느림 (5) (0) | 2022.08.08 |
아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.5 (0) | 2022.08.06 |
TFT LCD에서 한글 영문 같이 출력(4) (0) | 2022.08.04 |
TFT LCD에서 한글 출력 출력소스 개선(3) (0) | 2022.08.04 |