0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-05-05

#動機

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

#ソース

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)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?