뎃
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
Plist.h
|
||||||
212
bitCol.h
Normal file
212
bitCol.h
Normal file
@@ -0,0 +1,212 @@
|
|||||||
|
const uint32_t bitCol[][4] = {
|
||||||
|
{
|
||||||
|
0x38828,
|
||||||
|
0x82882882,
|
||||||
|
0x88288b89,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c28,
|
||||||
|
0x428429c2,
|
||||||
|
0x90290b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c28,
|
||||||
|
0x428429c2,
|
||||||
|
0x84284b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39429,
|
||||||
|
0x429429c2,
|
||||||
|
0x84284b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c29,
|
||||||
|
0x29029c2,
|
||||||
|
0x84284b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c29,
|
||||||
|
0x29029c2,
|
||||||
|
0x94294b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c28,
|
||||||
|
0x42842842,
|
||||||
|
0x84284b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c29,
|
||||||
|
0x429429c2,
|
||||||
|
0x94294b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c29,
|
||||||
|
0x429429c2,
|
||||||
|
0x84284b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c11,
|
||||||
|
0x41141141,
|
||||||
|
0x1411491d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x10810,
|
||||||
|
0x81081081,
|
||||||
|
0x8108909,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c10,
|
||||||
|
0x410411c1,
|
||||||
|
0x1011091d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c10,
|
||||||
|
0x410411c1,
|
||||||
|
0x410491d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11411,
|
||||||
|
0x411411c1,
|
||||||
|
0x4104905,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c11,
|
||||||
|
0x11011c1,
|
||||||
|
0x410491d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c11,
|
||||||
|
0x11011c1,
|
||||||
|
0x1411491d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c10,
|
||||||
|
0x41041041,
|
||||||
|
0x4104905,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c11,
|
||||||
|
0x411411c1,
|
||||||
|
0x1411491d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x11c11,
|
||||||
|
0x411411c1,
|
||||||
|
0x4104905,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x40943942,
|
||||||
|
0x14214b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x38808,
|
||||||
|
0x80883882,
|
||||||
|
0x8208b89,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c08,
|
||||||
|
0x408439c2,
|
||||||
|
0x10210b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c08,
|
||||||
|
0x408439c2,
|
||||||
|
0x4204b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39409,
|
||||||
|
0x409439c2,
|
||||||
|
0x4204b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x9039c2,
|
||||||
|
0x4204b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x9039c2,
|
||||||
|
0x14214b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c08,
|
||||||
|
0x40843842,
|
||||||
|
0x4204b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x409439c2,
|
||||||
|
0x14214b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x409439c2,
|
||||||
|
0x4204b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c09,
|
||||||
|
0x40943940,
|
||||||
|
0x94094b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x38808,
|
||||||
|
0x80883880,
|
||||||
|
0x88088b89,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c08,
|
||||||
|
0x408439c0,
|
||||||
|
0x90090b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39c08,
|
||||||
|
0x408439c0,
|
||||||
|
0x84084b9d,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x39409,
|
||||||
|
0x409439c0,
|
||||||
|
0x84084b85,
|
||||||
|
66
|
||||||
|
},
|
||||||
|
{
|
||||||
|
0x41020,
|
||||||
|
0x81040821,
|
||||||
|
0x4208410,
|
||||||
|
66
|
||||||
|
}
|
||||||
|
};
|
||||||
199
sketch_sep26a.ino
Normal file
199
sketch_sep26a.ino
Normal file
@@ -0,0 +1,199 @@
|
|||||||
|
#include <Keyboard.h>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <Mouse.h>
|
||||||
|
#include "Arduino_LED_Matrix.h"
|
||||||
|
#include "Plist.h"
|
||||||
|
#include "bitCol.h"
|
||||||
|
|
||||||
|
ArduinoLEDMatrix matrix;
|
||||||
|
|
||||||
|
String korLangToEngLang(const char* utf8);
|
||||||
|
|
||||||
|
int keyVal[5] = {600, 650, 700, 800, 900};//s1,s2,s3...
|
||||||
|
int NumKeys = 5;
|
||||||
|
int keyIn;
|
||||||
|
int key = -1;
|
||||||
|
int oldkey = -1;
|
||||||
|
|
||||||
|
int pointer = 0;
|
||||||
|
|
||||||
|
String dubeolsik;
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Keyboard.begin();
|
||||||
|
Mouse.begin();
|
||||||
|
//Serial.begin(9600);
|
||||||
|
matrix.begin();
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop()
|
||||||
|
{
|
||||||
|
/* 디버깅용 시리얼 통신은 서비스 종료다
|
||||||
|
if(Serial.available() > 0)
|
||||||
|
{
|
||||||
|
int inByte = Serial.read();
|
||||||
|
switch (inByte) {
|
||||||
|
|
||||||
|
case 'a':
|
||||||
|
Serial.print("aca");
|
||||||
|
++pointer;
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
|
||||||
|
--pointer;
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c':
|
||||||
|
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
Serial.print(PlistCount);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'd':
|
||||||
|
dubeolsik = korLangToEngLang(Plist[pointer]);
|
||||||
|
Serial.print(dubeolsik);
|
||||||
|
Serial.print(Pw);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
keyIn = analogRead(0);
|
||||||
|
key = getKey(keyIn);
|
||||||
|
|
||||||
|
if (key != oldkey)
|
||||||
|
{
|
||||||
|
delay(50);
|
||||||
|
keyIn = analogRead(0);
|
||||||
|
key = getKey(keyIn);
|
||||||
|
if(key != oldkey)
|
||||||
|
{
|
||||||
|
oldkey = key;
|
||||||
|
if (key >= 0)
|
||||||
|
{
|
||||||
|
switch(key)
|
||||||
|
{
|
||||||
|
case 0: //s1 act as left
|
||||||
|
if (pointer > 0)
|
||||||
|
{
|
||||||
|
--pointer;
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1: //s2
|
||||||
|
break;
|
||||||
|
case 2: //s3 act as right
|
||||||
|
if (pointer <= PlistCount)
|
||||||
|
{
|
||||||
|
++pointer;
|
||||||
|
matrix.loadFrame(bitCol[pointer]);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3: //s4 act as down button?
|
||||||
|
//Keyboard.end();
|
||||||
|
Mouse.click();
|
||||||
|
break;
|
||||||
|
case 4: //s5 middle button
|
||||||
|
dubeolsik = korLangToEngLang(Plist[pointer]);
|
||||||
|
delay(50);
|
||||||
|
Keyboard.print(dubeolsik);
|
||||||
|
delay(100);
|
||||||
|
Keyboard.write(KEY_KP_ENTER);
|
||||||
|
delay(100);
|
||||||
|
Keyboard.print(Pw);
|
||||||
|
delay(100);
|
||||||
|
Keyboard.write(KEY_KP_ENTER);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
int getKey(unsigned int input)
|
||||||
|
{
|
||||||
|
int k;
|
||||||
|
for (k = 0; k < NumKeys; k++)
|
||||||
|
{
|
||||||
|
if (input < keyVal[k])
|
||||||
|
{
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (k >= NumKeys)k = -1;
|
||||||
|
return k;
|
||||||
|
}
|
||||||
|
|
||||||
|
//한글을 키보드 자판그대로 영어로 침 이보다 더 완벽한 설명을 모르겠음
|
||||||
|
//해당 메서드의 존재이유는 키보드 라이브러리에서 print메서드가 아스키기반으로 동작하는지 한글 먹으면 고장나서 그럼
|
||||||
|
String korLangToEngLang(const char* utf8) {
|
||||||
|
const char* choseong[19] = {
|
||||||
|
"r","R","s","e","E","f","a","q","Q","t",
|
||||||
|
"T","d","w","W","c","z","x","v","g"
|
||||||
|
};
|
||||||
|
const char* jungseong[21] = {
|
||||||
|
"k","o","i","O","j","p","u","P","h","hk",
|
||||||
|
"ho","hl","y","n","nj","np","nl","b","m","ml","l"
|
||||||
|
};
|
||||||
|
const char* jongseong[28] = {
|
||||||
|
"","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"
|
||||||
|
};
|
||||||
|
|
||||||
|
String result = "";
|
||||||
|
|
||||||
|
//사실 이 시점에서 그냥 hid keycode document보고 직접 내가 키코드 배열로 적는게 더 쉽지않았을까 생각되면 개추
|
||||||
|
|
||||||
|
//한글 조합형 자모는 U+1100~11FF[11] 영역에 위치한다.
|
||||||
|
//한글 완성형 자모는 U+3130~318F 영역에 위치한다.
|
||||||
|
//한글 완성형 글자는 U+AC00~D7A3[12] 영역에 위치한다.
|
||||||
|
// => 알았지 chatgpt야? 해줘
|
||||||
|
while (*utf8) {
|
||||||
|
unsigned int codepoint = 0;
|
||||||
|
unsigned char ch = *utf8;
|
||||||
|
|
||||||
|
if (ch < 0x80) {
|
||||||
|
codepoint = ch;
|
||||||
|
utf8 += 1;
|
||||||
|
} else if ((ch & 0xE0) == 0xC0) {
|
||||||
|
codepoint = ((utf8[0] & 0x1F) << 6) |
|
||||||
|
(utf8[1] & 0x3F);
|
||||||
|
utf8 += 2;
|
||||||
|
} else if ((ch & 0xF0) == 0xE0) {
|
||||||
|
codepoint = ((utf8[0] & 0x0F) << 12) |
|
||||||
|
((utf8[1] & 0x3F) << 6) |
|
||||||
|
(utf8[2] & 0x3F);
|
||||||
|
utf8 += 3;
|
||||||
|
} else {
|
||||||
|
utf8 += 1; // skip invalid character
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (codepoint >= 0xAC00 && codepoint <= 0xD7A3) {
|
||||||
|
int syllableIndex = codepoint - 0xAC00;
|
||||||
|
int cho = syllableIndex / (21 * 28);
|
||||||
|
int jung = (syllableIndex % (21 * 28)) / 28;
|
||||||
|
int jong = syllableIndex % 28;
|
||||||
|
|
||||||
|
result += choseong[cho];
|
||||||
|
result += jungseong[jung];
|
||||||
|
result += jongseong[jong];
|
||||||
|
} else {
|
||||||
|
result += (char)codepoint; // non-Hangul characters
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
Reference in New Issue
Block a user