아두이노를 이용한 SUN-to-USB 컨버터 제작3: Code 설명

안녕하세요.

제가 사용하는 Code에 대한 설명입니다.

여기 저기서 찾은 것들을 섞어서 만든 것이라 원본이 어디였는지 모르겠네요.

링크된 Code가 rev2로 되어 있는 것으로 봐서는 많이 바뀐 것 같은데...


//-------------------------------------------------------------------

int scancodes[128] = {
  0, // 0x00
  120, // STOP
  129, // 0x02 VOLUME DOWN
  121, // AGAIN
  128, // 0x04 VOLUME UP
...



이부분은 SUN 키보드에서 들어오는 Data를 ASC코드로 변환하는 Table입니다.

//-------------------------------------------------------------------

#define KEYDOWN 0
#define KEYUP 1

int FN = 0;
int LED_state = 0;
int modifier_value = 0x00;
int keystate = KEYUP;

각종 define, 변수들


//-------------------------------------------------------------------

void toggle_LED_state(int bit) {
  if(LED_state&(1<<bit)) {
    LED_state &= ~(1<<bit);
  } else {
    LED_state |= (1<<bit);
  }
  Serial1.write(0x0e);
  Serial1.write(LED_state);
}

CAPSLOCK, NUMLOCK, SCROLLLOCK 키에 대한 LED on/off

//-------------------------------------------------------------------

void setup() {
  Serial1.begin(1200);
  while (!Serial1) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }
Keyboard.begin();
}

Keyboard와 연결된 serial port 시작

usb keyboard 시작

//-------------------------------------------------------------------

void loop() {

  // if there's any serial available, read it:
  while (Serial1.available() > 0) {
    unsigned char sun_code = Serial1.read();

    keystate = (sun_code > 0x7f) ? KEYUP : KEYDOWN;
    sun_code &= 0x7f;

    int asc_code = scancodes[sun_code];
    if (asc_code <= 119) {
      asc_code +=136;
    }

    if(sun_code == 0x7f) {
      Keyboard.releaseAll();
    } else {
      if(keystate == KEYDOWN) {
    Keyboard.press(asc_code);
      } else {
        Keyboard.release(asc_code);
      }

}

시리얼 포트로 data가 올때 마다  분석하고, USB Keyboar data로 변환.

입력 Data가 127 이하이면 키가 눌린 것이고 128이상이면 반대.

입력 Data가 127이면  아무키도 안 눌림.


댓글 18
묵정밭 2015-09-08 17:58

와우, 귀한 소스인듯. 그런데 어렵습니다. 아두이노에 넣는 코드 맞지요? 선키보드에 대한 관심이 증폭되길 바랄께요^^

blackonyx 2015-09-11 10:28

네. 고맙습니다.

지금 사용하고 있는 Code이고 앞의 Table은 링크된 Code에서 복사해서 쓰셔도 됩니다.

한 번 해보신 분들은 쉬울텐데, 처음 접하는 분들은 많이 힘들 것 같아요.

매니아 분들의 선키보드에 대한 느낌을 들어보고 싶네요.

농구뇽 2015-09-13 23:04

어렵군요 ㅎㅎ

해시 2015-09-23 16:11

정말 어려워요 ㅋㅋ

해시 2015-09-23 16:11

정말 어려워요 ㅋㅋ

dump2null 2015-09-24 04:59

SUN 키보드 사용자분을 뵙게 되어서 반갑네요!


쓰시는 SUN 키보드가 어떤건지 궁금합니다...

===========

이런...몹시도 반가운 나머지 이전에 올리신 글들을 보지도 않고 질문을 했네요...-_-;;

Type5 라니.......명품이지요.....저도 정말 하나 갖고 싶군요! 부럽습니다!


좋은 팁 남겨주셔서 감사합니다



blackonyx 2015-09-30 08:43

명품을 알아보시다니 ㅎㅎ

키보드만 구하세요. 나머지는 제가 도와 드리겠습니다~

blackonyx 2015-09-30 08:44

포기하지 마세요 ^^

슬퍼하지마 NoNoNo

blackonyx 2015-09-30 08:44

포기하지 마세요 ^^

혼자가 아니야 NoNoNo
jjj1989 2015-10-02 09:52

대단하십니다

Macstall 2015-10-12 22:33

좋은 정보 감사합니다^^

레몬^^ 2015-10-20 22:43

정보 감사합니다. ㅎ

꿿쨻쯄 2015-11-10 15:08

끙.. 감사합니다


정리왕패킹 2015-11-27 11:13

좋은 정보 감사합니다

해피좋아 2016-01-13 11:08

정보 감사합니다.

rnsrakwk4 2016-01-15 19:20

정보 감사합니다

닥달 2016-01-23 19:12

정보 감사합니다.


66v 2016-02-18 17:17

좋은 정보 감사드립니다!