본문 바로가기

프로젝트/TFT LCD 한글 출력 (아두이노)

(22)
Hangul_SD.H 를 이용한 한글 출력 ( 폰트파일 필요함 ) 한글 폰트파일과 인덱스 파일이 필요 합니다. 두 파일의 구조는 여기를 참고 Hangul_SD.H // HanGul.SD.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포 금지 링크를 사용 하세요. // // Index1 구조 ( 4 Byte Record ) [폰트offset : 4byte Long] // Index2 구조 ( 8 Byte Record ) [폰트코드 : 4byte Long][폰트offset : 4byte Long] // // Index2 사용시 소스코드에 #define _INDEX_2_ 코드 넣어야 함 // // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하고 include 앞에 선언..
StreamReader.H SD카드 텍스트파일 라인읽기 메소드 StreamReader( 텍스트 파일 이름) SS핀은 10으로 자동 설정 Uno 자동 파일 open StreamReader( 텍스트 파일 이름 , SS핀 번호) Mega는 53 Uno는 10 자동 파일 open ReadLine() 한줄씩 파일을 읽어 온다 ReadLine( n ) n번쩨 줄로 이동하여 읽어 온다. ( 처음 줄 번호는 0임) open() close()후 다시 파일 사용시 첫라인부터 다시 시작 close() 파일을 닫음 endf() 파일의 끝이면 true 아니면 false StreamReader.H #ifndef _StreamReader_ #define _StreamReader_ #include #include class StreamReader { private : File _f; S..
Hangul_SD_Selected.H 를 이용한 한글 출력 Hangul_SD_Selected.H // Hangul_SD_Selected.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포는 금지, 그냥 링크를 사용 하세요. // // 영리목적( 유료 강의 자료, 판매 시스템에 포함 등 )의 사용은 사전 허락을 받아야 합니다. //// // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하면 됨 // #include "c:\\Arduino\\Hangul_SD_Selected.H" // 헤더파일 전체 경로 // HanGul_TFT ht; // 한글출력 클래스 // #ifndef _Hangul_SD_Selected_ #define _Hangul_SD_Selected_..
Hangul_Directed.H 를 이용한 한글 출력 예제 동영상보기 Hangul_Directed.H // Hangul_Direct.H ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포는 금지, 그냥 링크를 사용 하세요. // // 영리목적( 유료 강의 자료, 판매 시스템에 포함 등 )의 사용은 사전 허락을 받아야 합니다. // // // #define _TFTLCD_ myLcd // myLcd는 원하는 이름으로 하면 됨 // #include "c:\\Arduino\\HanGul_Direct.H" // 헤더파일 전체 경로 // HanGul_TFT ht; // 한글출력 클래스 // #ifndef _Hangul_Direct_ #define _Hangul_Direct_ #include #inclu..
필요한 폰트를 메모리에 두지 말고 파일에 담아 사용하자. 필요한 폰트를 파일에 담아 사용하기 위해서는 아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.0에 다음과 같은 폰트 파일을 추가로 생성하게 해야 한다. ( Font.utf ) 필드 1 필드2 36Byte 한글코드 4byte 폰트 (unsigned short 2byte ) *16 = 32byte 출력을 위하여 Hangul_Direct.H를 수정하여 Hangul_SelectSD.H를 제작 한다. 출력할 문자를 폰트파일의 한글코드와 비교하여 폰트를 찾는 것으로 수정 하면 된다. 기존 _memFont( long code) 를 _sdFont( long cod)로 수정 한다. 기존 함수 memFont( long code) bool HanGul_TFT::_memFont( long code ) { int si..
F연산자와 readLine 함수 사용하여 메모리 확보하기 코드 내부의 글자도 메모리를 잡아 먹는다. 그래서 F연산자로 플래쉬메모리(코드저장부분) 저장 하지만 그래도 한계가 있다. Uno의 경우는 더 심하다. 코드내에 글자수가 맘아지면 담을 수 있는 폰트도 많이 줄어 버린다. 이경우를 해결하기 위하여 코드안의 문장을 파일로 저장하고 출력 직전에 불러 오는 방식을 사용 하려고 한다. 문제는 문장을 쓰는 SD.prinln()은 있지만 문장을 읽어 오는 함수가 없어 엄청 불편 하다. 그래서 String readLine( File inf ) 함수를 만들었다. 메모장 등에서 텍스터 파일을 작성하면 문장 끝에는 16진수 0x0d 0x0a의 두 바이트가 붙어 있다. String readLine( File inf ) // 읽어올 파일을 변수로 받는다. { char buff[5..
Hangul_SD,H ( SD카드에 폰트화일,인덱스화일 ) 아두이노 Mega 사용시 주의할 점 SD카드를 사용 하려면 Uno와 SPI핀 번호가 달라 다음 2가지 중 하나의 방법으로 해야 한다. 쉴드를 아두이노 Mega에서 SD카드 사용을 위한 방법(Uno와 SPI핀 다름) Uno의 SPI핀번호에 해당하는 핀을 SPI핀과 연결함 번거롭다(납땜이 필요) 핀4개 사용불가 SD모듈을 따로 구입하여 사용한다. 얼마 안함 저렴함.( 추천 ) 폰트화일과 인덱스파일은 스스로 만들어 보세요. 규격은 여기로 대부분의 경우 따로 폰트가 필요 없는 Hangul_Direct.H를 Mega보드(120자 정도)와 같이 사용 하면 됩니다. HanGul.SD ver 1.0 // HanGul.SD ver 1.0 아두이노용 한글 출력 클래스 // // 제작자 : 신 옥 진 // // 재배포 금지..
Hangul_Direct.h ( 필요한 폰트만 코드에 삽입 ) 아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.0 으로 폰트를 만들어 아두이노 소스코드에 삽입한 후 한글을 출력하는 한글 Class sd카드와 별도의 폰트파일이 필요 없다. 필요에 따라 16x16 폰트 에디터로 만든 사용자 문자도 사용 가능 하다. 아두이노 코드에서 사용 하는 예 사용 보드는 아두이노 mega ( Uno는 20~30자가 메모리 한계임) 코드 내부의 글자도 메모리를 잡아 먹는다. 그래서 F연산자로 플래쉬메모리(코드저장부분) 저장 하지만그래도 한계가 있다. Uno의 경우는 더 심하다. 코드내에 글자수가 많아 지면 담을 수 있는 폰트도 많이 줄어 버린다.이경우를 해결하기 위하여 코드안의 문장을 파일로 저장하고 출력 직전에 불러 오는 방식을 사용 하려고 한다.문제는 문장을 쓰는 SD...
한글CLASS 메소드 HanGul_SD.H HanGul_Direct.H Class 메소드 void start() 한글클래스 시작 void end() 한글클래스 종료 : 사용 안해도 됨 void color(int _c ) 글자색 void color(int _c ,int _bk) 글자색, 배경색 void fill(int _c) 바로 앞에 출력한 문자열을 _c 색으로 채우기 void fill() 배경색으로 채우기 void rect(int _c) 바로 앞에 출력한 문자열에 _c 색으로 테두리 그리기 void rect() 문자색으로 테두리 그리기 void under(int _c) 바로 앞에 출력한 문자열에 문자색으로 밑줄 그리기 void under() 문자색으로 밑줄 그리기 void print( String s, int x, int ..
한글출력 Class 폰트파일, 인덱스 규격 HanGul.TFT.H ver 1.0 아두이노용 한글 출력 클래스 사용할 폰트와 인텍스는 다음 규격으로 만들어 사용 하세요.( Binary 파일로 작성하세요) 폰트 파일 규격 구조 레코드당 : 32 Byte Font Data Binary File 폰트 기록 순서 코드 값이 작은 것부터 기록 폰트파일 32Byte 32Byte : 32Byte 인덱스 방법 필드 1 필드 2 레코드 사이즈 인덱스 방법 1 폰트offset : 4byte Long 4Byte 인덱스 방법 2 폰트코드 : 4byte Long 폰트offset : 4byte Long 8Byte 인덱스 방법 1 인덱스 방법 2 폰트 offset : 4Byte 문자코드 : 4Byte 폰트 offset : 4Byte 폰트 offset : 4Byte 문자코드 ..
TFT LCD에서 SD카드 다양한 한글 출력 (7) https://youtu.be/yS_wQY9ekw4
TFT LCD에서 SD카드 한글 출력 인덱스 사용( 속도 빨라짐) (6) 앞의 (5)번글에서 상당이 속도가 느렸다. 글자당 폰트파일 하나를 만드는 방식은 폰트를 찾을 때 한글코드로 바로 찾을 수 있는 장점이 있다. 예로 '가'는 EAB080으로 폰트 파일은 EAB080.utf 로 바로 찾을 수 있다. 여러가지 실험 끝에 파일 오픈에 매우 많은 시간이 소요 되었다. 그래서 글자마다 계속 하나씩 파일 오픈하니 속도가 느려질 수밖에 없었다. 그래서 폰트 파일을 하나의 파일로 만들었다 Hangul.utf 파일을 프로그램 시작시 오픈 한 후 계속 사용하면 오픈에 소용되는 시간이 없어져 속도가 크게 개선 될것이다. 구조는 레코드당 ( 한글코드+폰트)로 만들었다. 근데 문제는 한글코드로 폰트 위치 찾기였다. 일단 단순하게 레코드의 한글코드를 모두 비교하여 코드를 찾았다. 시간이 별로 개선..
TFT LCD에서 SD카드 한글 출력-많이 느림 (5) SD카드에 한글폰틀 모두 저장하고 TFT LCD에 표시해 보았습니다. 하나의 폰트파일에서 코드를 검색하여 폰트를 가져오는 방법은 코딩이 길어져 아두이노의 메모리에 부담을 줄것 같아 폰트를 코드를 이름으로 하는 각각 한글자당 하나의 파일로 만들고 불러오는 방식으로 했습니다. SD카드 라이브러리가 많은 용량을이 필요하여 가급적 코드를 줄였습니다. 처음에는 폴더 파일을 만들고 그 안에 모든 폰트파일을 담아 실행하니 너무 속도가..ㅠㅠ 그래서 모든 파일은 root에 두었습니다. 그래도 역시 메모리 보다 상당이 속도가...ㅠㅠ 함 보시죠. https://youtu.be/ubfARR1dFyo 좀더 방법을 연구..............
Arduino TFT LCD 한글 출력 소스 CODE(1) #include // TFT LCD 사용을 위해 그냥 Copy하여 사용할 코드들 입니다. #include #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 cF..
아두이노 한글 폰트 Code 자동생성 프로그램 ver 2.5 2.5버젼으로 업그레이드 되면서 한글 Class는 Hangul_Direct.H Hangul_SD_Selected.H만 사용 이전에 만든 다른 한글 Class와는 호환이 안됨 두개의 파일이 생성됨 txt파일은 Hangul_Direct.H용 (코드 삽입용) utf파일은 Hangul_SD_Selected.H용 (SD카드 저장용) 처음 한글1자씩 추출하는 프로그램에서 출발하여 이제 완성 되었습니다. 제가 사용 해보니 이젠 별다른 개선은 필요 없을 듯합니다. 버그가 나오면 수정 하는 정도만........ 이전 버젼은 카테고리 [소스코드 & 지난버젼]에 글들이 있습니다. 참고 하세요. 1. 문장 입력하기 텍스트박스에 문장을 입력하세요, 입력한 문장에서 자동으로 한글만 중복 없이 추출합니다. 따라서 영문, 숫자가 함..
TFT LCD에서 한글 영문 같이 출력(4) 이제는 다음과 같은 함수로 간단이 화면에 한글과 영문을 같이 표현 한다. printFont( "아름다운 KOREA 한글",5,100,1); void printFont( String s, int x, int y , int m ) // m은 배율이다. { myGLCD.setTextSize(2*m); int size=sizeof(font) /sizeof(Font); // font의 갯수를 구함 C#의 length 같은 것이 없어서 // 전체 font의크기 / Font 구조체 사이즈 = font갯수 for( int p=0; p
TFT LCD에서 한글 출력 출력소스 개선(3) TFT LCD에서 한글 출력 (2)의 소스를 배열을 이용한 코드로 수정 합니다. 공백폰트를 하나 추가합니다. // ' ' BitMap Font unsigned short fontBlank[16] ={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; 폰트 밑에 다음과 같이 포인터 변수를 선언 합니다. short *font[]={ fontA ,fontRum, fontDa,fontUn,fontBlank,fontHan,fontGul }; Setup()의 출력부분 코드를 다음과 같이 변경합니다. for( int i =3; i >=1 ;i--) { x=50; fSize=i*16; // 1배는 16 dot 2배는 32 dot n배는 n*16 dot if( i == 2 ) myGLCD.setColor( ..
TFT LCD에서 특정 폰트만 추출하여 한글 출력 (2) 동영상보기 보다 다양하게 한글을 출력한 모습입니다. 한글 폰트 만들기 프로그램으로 추출한 폰트 를 사용했습니다. 필요한 폰트만 아두이노 코드에 올려 사용합니다. 속도가 빠르지만 많은 문자는 아두이노 용량때문에 제한 됩니다. 아두이노 Uno에서는 30자 이상은 무리...에러 또는 다운됨 프로그램 길이에 따라 메모리가 부족 할수도 있습니다. 아두이노 메가에도 TFTLCD쉴드를 사용 할수 있습니다. 메가는 아두이노의 4배용량입니다. 그래서 메가 추천 필요한 폰트만 가져오면 용량이 작은 아두이노에서도 문제 없습니다. 아두이노 소스 코드 #include #include UTFTGLUE myGLCD(0x9488,A2,A1,A3,A4,A0); ///////////////////// TFT #define cBLACK ..
TFT LCD에서 한글 출력 (1) 한글 출력에 사용할 TFT LCD입니다. 보드 : 아두이노 Uno , Mega --- Mega추천 용량이 4배 (Mega 직구로 2개에 배송비 포함 ₩ 28,399에 구입) TFTLCD : 알리,옥션 등에 파는 489x320 VGA 3.5인치 SD카드 쉴드 가격은 1만원 이하에서 비싼 곳은 3만원 하네요. 3년전에 $17.79에 알리스 구입 구형이라 많이 저렴해 졌네요. 터치팬 기능 없는 제품입니다. SD카드 라이브러리 사용시 메모리 많이 잡아 먹음 micro SD카드 FAT16 FAT32포멧 windows에서는 64GB이하만 FAT포맷됨 그이상은 안됨 그이상은 다른 포맷 프로그램으로 포맷하면 사용 가능. (구글링하면 바로 나옴) 근데 폰트파일과 인덱스 파일에는 큰 용량 필요 없음 검색은 3.5 인치 T..
wemos mini 한글 출력(3)--애니메이션효과 조합형 한글 코드조합 로직입니다. 그냥 참고만 하세요.( 별 필요 없음 ) 요래전 코딩이라 지금은 나도 코드를 잘 모르겠음 ㅋㅋㅋ 요즘은 UTF-8 이나 EUC-KR 코드 완성형으로 코드 조합없이 바로 사용합니다 바로 아두이노에서 사용 할수 있는 한글 1자씩 폰트를 얻는 프로그램을 이미 제작했습니다. 정리해서 올리도록 하겠숩니다. #include "HanGulFont.h" #include #include /* //////////////////////////////////////////////////////////////////////// WeMos 를 사용하여 LCD 1602에 한글 출력 /////////////////////////////////////////////////////////////////..
LCD 16X2에 무리한 한글출력 모습 (2) 0~7번 문자를 사용하면 동시에 8개의 문자 출력이 가능 하지만 5x8픽셀은 한글출력에 많이 부족합니다. 한글폰트는 16x16입니다. 여기서 다음과 같은 문제점이 발생합니다. (문제1) 한글 1자 출력에 필요한 LCD문자수는 ? # 시도1 : 일단 1문자당 한글 1자표현해 보기 일부만 보여주고 계속 다른부위를 보여줌. # 시도2 : 8문자를 사용해 1자 표현해보기 (문제2) 폰트용량을 아두이노가 감당 못함 다음 동영상은 시도1A의 시도모습입니다. 8자 출력이 가능합니다.
LCD 16X2에 사용자 문자 출력 (1) 한글은 ? 다른 동영상 보기 LCD1602는 동시에 8문자를 사용자가 프로그래밍 가능합니다. 각 문자는 5X8Dot로 표현 됩니다. 한글은 ? 5x8로 표현되는 글자만 되겠죠. 꼭 한글출력이 필요시 저렴한 TFT LCD를 사용을 권장합니다. 이때는 폰트파일 크기가 Arduino Uno의 메모리가 작아 문제가 있지만 다른 보드를 사용 하든지 필요한 문자만 사용 하면 됨 TFT 사용보기 클릭 ○○●○○ B00100 // 이진수 표현 또는 0b01110 0x04 ○●●●○ B01110 // 0 1110는 16진수로-> 0x0E ●○●○● B10101 // 0x15 ○○●○○ B00100 // 0x04 ○○●○○ B00100 ○○●○○ B00100 ○○●○○ B00100 ○○○○○ B00000 이 데이타를 원하는 문자에 ..