Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Created by yclee126 for maniaboard project V2.0
- #include <Keyboard.h>
- const int strbuffersize = 100; //최소 40 이상
- char strbuffer[strbuffersize];
- #define korPrint_P(stw) strlen(stw) < strbuffersize ? strcpy_P(strbuffer, PSTR(stw)) : strcpy_P(strbuffer, PSTR("**오류 : 문장이 너무 깁니다!!")), korPrint(strbuffer)
- #define korPrintln_P(stw) korPrint_P(stw), Keyboard.write(KEY_RETURN)
- void setup() {
- Keyboard.begin();
- }
- void loop() {
- delay(5000);
- korPrintln_P("입력과 출력이 모두");
- korPrintln_P("UTF-8 한글로 이루어진");
- korPrint_P("한글 타이핑 함수");
- while(1);
- }
- boolean hangulLatch = false;
- void korPrint(char* userstring){
- for(int i = 0; i < strlen(userstring); i ++){
- if((byte)userstring[i] > 0b11100000){//현재 글자가 3바이트 UTF-8 글자의 첫부분이면 한글
- if(!hangulLatch){
- Keyboard.write(KEY_RIGHT_ALT);
- hangulLatch = true;
- }
- korWrite(&userstring[i]);
- i += 2;
- }
- else if(userstring[i] == ' '){ //가상 줄바꿈 문자
- Keyboard.write(KEY_RETURN);
- }
- else{ //그 외(영어)
- if(hangulLatch){
- Keyboard.write(KEY_RIGHT_ALT);
- hangulLatch = false;
- }
- Keyboard.write(userstring[i]);
- }
- }
- }
- void korPrintln(char* userstring){
- korPrint(userstring);
- Keyboard.write(KEY_RETURN);
- }
- void korWrite(char* userstring){
- unsigned int unichar = 0;
- byte utfchar[3] = {0,};
- utfchar[0] |= *(userstring+0);
- utfchar[1] |= *(userstring+1);
- utfchar[2] |= *(userstring+2);
- utfchar[0] &= 0b00001111;
- utfchar[1] &= 0b00111111;
- utfchar[2] &= 0b00111111;
- unichar += utfchar[0];
- unichar <<= 6;
- unichar += utfchar[1];
- unichar <<= 6;
- unichar += utfchar[2];
- if(unichar < 0xAC00){ //한글 자모
- unichar -= 0x3131;
- char jamo[51][3] = {"r", "R", "rt", "s", "sw", "sg", "e", "E", "f", "fr", "fa", "fq", "ft", "fx", "fv", "fg", "a", "q", "Q", "qt", "t", "T", "d", "w", "W", "c", "z", "x", "v", "g", "k", "o", "i", "O", "j", "p", "u", "P", "h", "hk", "ho", "hl", "y", "n", "nj", "np", "nl", "b", "m", "ml", "l"};
- //한글 자모 ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄸ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅃ ㅄ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
- Keyboard.print(jamo[unichar]);
- }
- else{ //완성형 한글
- unichar -= 0xAC00;
- char chosung[19][2] = {"r", "R", "s", "e", "E", "f", "a", "q", "Q", "t", "T", "d", "w", "W", "c", "z", "x", "v", "g"};
- //한글 초성 ㄱ ㄲ ㄴ ㄷ ㄸ ㄹ ㅁ ㅂ ㅃ ㅅ ㅆ ㅇ ㅈ ㅉ ㅊ ㅋ ㅌ ㅍ ㅎ
- char jungsung[21][3] = {"k", "o", "i", "O", "j", "p", "u", "P", "h", "hk", "ho", "hl", "y", "n", "nj", "np", "nl", "b", "m", "ml", "l"};
- //한글 중성 ㅏ ㅐ ㅑ ㅒ ㅓ ㅔ ㅕ ㅖ ㅗ ㅘ ㅙ ㅚ ㅛ ㅜ ㅝ ㅞ ㅟ ㅠ ㅡ ㅢ ㅣ
- char jongsung[28][3] = {"", "r", "R", "rt", "s", "sw", "sg", "e", "f", "fr", "fa", "fq", "ft", "fx", "fv", "fg", "a", "q", "qt", "t", "T", "d", "w", "c", "z", "x", "v", "g"};
- //한글 종성 (없음) ㄱ ㄲ ㄳ ㄴ ㄵ ㄶ ㄷ ㄹ ㄺ ㄻ ㄼ ㄽ ㄾ ㄿ ㅀ ㅁ ㅂ ㅄ ㅅ ㅆ ㅇ ㅈ ㅊ ㅋ ㅌ ㅍ ㅎ
- //Chosung
- Keyboard.print(chosung[unichar/588]); //초성 = unichar / 588
- //Jungsung
- unichar %= 588;
- Keyboard.print(jungsung[unichar/28]); //중성 = unichar / 28
- //Jongsung
- unichar %= 28;
- Keyboard.print(jongsung[unichar]); //종성 = unichar % 28
- }
- Keyboard.write(' ');
- Keyboard.write(KEY_BACKSPACE);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement