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