뎃
This commit is contained in:
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