ショートカットキーのためのショートカットキー作成（arduino Leonard を USB HIDデバイスとして使う。）

#動機

エクセルにしてもWindowsにしても、ショートカットキーは色々設定されているけど、その操作すら面倒くさいときがある。例えばエクセルの「値の貼り付け」って、「Ctrl + Alt + V からの v 」でしょ？キーを４つも押さないといけないなんて。入力が速い人はいいけど、俺はそんなに速くないから、ショートカットキー用のショートカットキーを作った。というのも、家にころがってるarduinoの使い道を考えているうちに、arduino leonard はUSBのHIDデバイスとして認識されるという記事を見たから。

#ソース
```cpp:HID-keyboard
/************

  Key	            Hexvalue	Decimal value
  KEY_LEFT_CTRL	    0x80	    128
  KEY_LEFT_SHIFT	0x81	    129
  KEY_LEFT_ALT	    0x82	    130
  KEY_LEFT_GUI	    0x83	    131
  KEY_RIGHT_CTRL	0x84	    132
  KEY_RIGHT_SHIFT	0x85	    133
  KEY_RIGHT_ALT	    0x86	    134
  KEY_RIGHT_GUI	    0x87	    135
  KEY_UP_ARROW	    0xDA	    218
  KEY_DOWN_ARROW	0xD9	    217
  KEY_LEFT_ARROW	0xD8	    216
  KEY_RIGHT_ARROW	0xD7	    215
  KEY_BACKSPACE	    0xB2	    178
  KEY_TAB	        0xB3	    179
  KEY_RETURN	    0xB0	    176
  KEY_ESC	        0xB1	    177
  KEY_INSERT	    0xD1	    209
  KEY_DELETE	    0xD4	    212
  KEY_PAGE_UP	    0xD3	    211
  KEY_PAGE_DOWN	    0xD6	    214
  KEY_HOME	        0xD2	    210
  KEY_END	        0xD5	    213
  KEY_CAPS_LOCK	    0xC1	    193
  KEY_F1	        0xC2	    194
  KEY_F2	        0xC3	    195
  KEY_F3	        0xC4	    196
  KEY_F4	        0xC5	    197
  KEY_F5	        0xC6	    198
  KEY_F6	        0xC7	    199
  KEY_F7	        0xC8	    200
  KEY_F8	        0xC9	    201
  KEY_F9	        0xCA	    202
  KEY_F10	        0xCB	    203
  KEY_F11	        0xCC	    204
  KEY_F12	        0xCD	    205

 ************/

#include "Keyboard.h"
#define READPIN1 2
#define READPIN2 9

// There is LEONARD at left of you...
#define Button1 2 // right top    1 win + e
#define Button2 3 // right middle 2 close WINDOW
#define Button3 4 // right bottom 3 execute chrome
#define Button4 9 // left  top    4 paste - Type - Ctrl + Alt + v + t
#define Button5 6 // left  middle 5 paste - Form - Ctrl + Alt + v + v
#define Button6 8 // left  bottom 6 execute pbrush

void setup() {
  //  Serial.begin(9600);
  Keyboard.begin();
  for (int i = READPIN1; i <= READPIN2; i++)
    pinMode(i, INPUT_PULLUP);
}

void loop() {
  if (digitalRead(Button1) == LOW) { // win + e
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('e');
    delay(100);
    Keyboard.releaseAll();

    while (digitalRead(Button1) == LOW);
  }

  if (digitalRead(Button2) == LOW) { // close WINDOW
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_F4);
    delay(100);
    Keyboard.releaseAll();

    while (digitalRead(Button2) == LOW);
  }

  if (digitalRead(Button3) == LOW) { // execute chrome
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('r');
    delay(200);
    Keyboard.releaseAll();
    Keyboard.print("chrome");
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();
    
    while (digitalRead(Button3) == LOW);
  }

  if (digitalRead(Button4) == LOW) { // paste - Type - Ctrl + Alt + v + t
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press('v');
    Keyboard.releaseAll();
    delay(200);
    Keyboard.press('t');
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();

    while (digitalRead(Button4) == LOW);
  }

  if (digitalRead(Button5) == LOW) { // paste - Value - Ctrl + Alt + v + v
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press('v');
    Keyboard.releaseAll();
    delay(200);
    Keyboard.press('v');
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();

    while (digitalRead(Button5) == LOW);
  }

  if (digitalRead(Button6) == LOW) { // execute pbrush
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('r');
    delay(200);
    Keyboard.releaseAll();
    Keyboard.print("pbrush");
    Keyboard.press(KEY_RETURN);
    delay(100);
    Keyboard.releaseAll();

    while (digitalRead(Button6) == LOW);
  }

  delay(150);
}
```

2,3,4,6,8,9番ピンを使用。実は、半田付けしているうちに、5,6と7,8番ピンをブリッジしてしまった・・・。ので、面倒くさいので9番ピンに移し替えた。余っているピンはもっとありますが、とりあえず今はこれで試してみる。

#回路
回路もできるだけシンプルにしたい。で、プルアップ抵抗をarduino内部のを使うことにしたのでpinMode(i, **INPUT_PULLUP**)とした。これをやらないと（プルアップ抵抗を使わないと）、arduino を手で触っただけで意図しない入力が入ってしまう。

#完成
下の動画を参考にして下さい。「書式」は、エクセルで書式の貼り付け、「値」はエクセルで値の貼り付け用のキーのこと。
https://www.youtube.com/watch?v=OWkRmA4D8WM

#参考サイト
https://qiita.com/MergeCells/items/17bdc1c1fb35949195b5
https://deviceplus.jp/hobby/entry_062/
http://11.xii.jp/gatew/cw/sogo/col4a1.cgi?mode=main&no=37
https://www.arduino.cc/reference/en/language/functions/usb/keyboard/

chrome起動のところを、KEY_RETURNするように変更(2020.5.6)