This commit is contained in:
2025-07-04 13:45:51 +09:00
commit 05f33feddb
3 changed files with 412 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
Plist.h

212
bitCol.h Normal file
View 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
View 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;
}