본문 바로가기
매크로

NGM 3.0을 하드웨어 방식으로 사용하기. (Arduino with NGM)

by 매크로제작 2019. 6. 11.
반응형

안녕하세요. 소심비형입니다. NGM 3.0을 하드웨어 방식으로 사용할 수 있는 시리얼 통신 기능에 대해 알아보도록 하겠습니다. 우선, 아두이노 레오나르도를 하나 구매해야겠죠? 또는 가상 아두이노를 다운로드 받아서 설치 후 연습해봐도 됩니다.

 

 

인터넷에 검색해보면 아두이노 레오나르도를 최저가에 구매할 수 있을겁니다. 대략 6,000원 선인거 같네요. 아무튼, 다른 제품이 아닌 레오나르도로 구입해야 합니다. 이유는, 레오나르도만 마우스, 키보드 모듈이 기본 장착되어 있기 때문입니다. 다른 제품은 직접 설치해야 하는데요. 아두이노는 메모리가 작아서 관리가 어렵고 복잡한 내용을 작성하기에는 어려움이 많기 때문입니다.

 

 

총알 배송으로 받은 아두이노 레오나르도를 컴퓨터에 연결합니다. 그러면, 아래 그림과 같은 프로그램이 실행되고 시리얼 포트도 자동으로 추가됩니다.

 

 

NGM과 연동하기 위한 코드를 작성해야 합니다. 아래처럼요.

 

 

코드는 정말 단순해서 NGM에서 제공하는 인터페이스만 맞으면 정상 동작하게 됩니다. 전체 코드는 아래에 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
void setup() {
  Serial.begin(9600);
}

  if (cmd != "") {
    String m = cmd.substring(01);
    if (m == "X") {
      int p = cmd.substring(1).toInt();
      Mouse.move(p, 0);
    }
    else if (m == "Y") {
      int p = cmd.substring(1).toInt();
      Mouse.move(0, p);
    }
    else if (m == "V" || m == "H") {
      Mouse.move(00, p);
    else if (m == "K") {
      String v = cmd.substring(2);
      if (v == "LeftShiftKey") {
        keyAction(c, KEY_LEFT_SHIFT);
      }
      else if (v == "RightShiftKey") {
        keyAction(c, KEY_RIGHT_SHIFT);
      }
      else if (v == "LeftControlKey") {
        keyAction(c, KEY_LEFT_CTRL);
      }
      else if (v == "RightControlKey") {
        keyAction(c, KEY_RIGHT_CTRL);
      }
      else if (v == "LeftAltKey") {
        keyAction(c, KEY_LEFT_ALT);
      }
      else if (v == "RightAltKey") {
        keyAction(c, KEY_RIGHT_ALT);
      }
      else if (v == "LeftArrow") {
        keyAction(c, KEY_LEFT_ARROW);
      }
      else if (v == "UpArrow") {
        keyAction(c, KEY_UP_ARROW);
      }
      else if (v == "RightArrow") {
        keyAction(c, KEY_RIGHT_ARROW);
      }
      else if (v == "DownArrow") {
        keyAction(c, KEY_DOWN_ARROW);
      }
      else if (v == "Backspace") {
        keyAction(c, KEY_BACKSPACE);
      }
      else if (v == "Tab") {
        keyAction(c, KEY_TAB);
      else if (v == "Enter") {
        keyAction(c, KEY_RETURN);
      }
      else if (v == "CapsLock") {
        keyAction(c, KEY_CAPS_LOCK);
      }
      else if (v == "F1") {
        keyAction(c, KEY_F1);
      }
      else if (v == "F2") {
        keyAction(c, KEY_F2);
      }
      else if (v == "F3") {
        keyAction(c, KEY_F3);
      }
      else if (v == "F4") {
        keyAction(c, KEY_F4);
      }
      else if (v == "F5") {
        keyAction(c, KEY_F5);
      }
      else if (v == "F6") {
        keyAction(c, KEY_F6);
      }
      else if (v == "F7") {
        keyAction(c, KEY_F7);
      }
      else if (v == "F8") {
        keyAction(c, KEY_F8);
      }
      else if (v == "F9") {
        keyAction(c, KEY_F9);
      }
      else if (v == "F10") {
        keyAction(c, KEY_F10);
      }
      else if (v == "F11") {
        keyAction(c, KEY_F11);
      }
      else if (v == "F12") {
        keyAction(c, KEY_F12);
      }
      else {
        if (c == "KD") {
          Keyboard.press(v[0]);
        }
        else if (c == "KU") {
          Keyboard.release(v[0]);
        }
      }
       int c = cmd.toInt();
    }
  }

void keyAction(String c, uint8_t k) {

  if (c == "KD") {

    Keyboard.press(k);
    Keyboard.release(k);
  }
}
cs

 

 위 코드를 아두이노에 붙여넣기 한 후 업로드 버튼을 클릭하세요. 간략하게 코드에 대해 설명하지만, NGM에서 시리얼로 변환해주는 인터페이스들을 스케치로 코드화한 내용입니다.

 

 

 

스케치가 컴파일중입니다.


 

 

컴파일된 코드가 아두이노로 업로드 되었습니다.

 

 

 

이제 NGM을 실행한 후 아래 동영상처럼 설정합니다.

 

 

 

위 영상을 보면 아시겠지만, 하드웨어적으로 입력되는건 기존 매크로처럼 마우스가 순간 이동되지 않습니다. 물론, 비활성 매크로도 안됩니다. 따라서, 마우스의 최대 속도인 127만큼만 이동이 되며, 거리를 자동으로 계산하여 이동시켜줍니다.

 

 

 

개발자에게 후원하기

 

 

추천, 구독, 홍보 꼭~ 부탁드립니다.

여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

감사합니다~ 

반응형

댓글