前回の続き。
Arduino LeonardoではHID USB Keyboardとしてkey.press()でキーボードのように振る舞うことが出来る。これはArduino IDE1.0.1ソース中の
hardware/arduino/cores/arduino 以下にある
HID.cpp
USBAPI.h
で定義されている。
USBAPI.hで定義されていないキーを、以下にまとめた。
参考:Universal Serial Bus(USB) HID Usage Tables
USBキーボードのコード
問題点:0x100以上のコードは正しく扱われない。HID.cpp中のKeyboard_::press()が8bitの範囲内でしか扱っていないためと思われる。コードの修正も必要になる。
MacOSXに接続して、Arduino Leonardoに繋いだボタンを押すとシャットダウン画面が出るものを作ってみた。また、pinmode(buttonPin,INPUT_PULLUP); で明示的なプルアップ指示をしてみた。これはArduino IDE 1.0.1からの機能。
Arduino LeonardoではHID USB Keyboardとしてkey.press()でキーボードのように振る舞うことが出来る。これはArduino IDE1.0.1ソース中の
hardware/arduino/cores/arduino 以下にある
HID.cpp
USBAPI.h
で定義されている。
USBAPI.hで定義されていないキーを、以下にまとめた。
参考:Universal Serial Bus(USB) HID Usage Tables
USBキーボードのコード
#define KEY_PRINTSCREEN 0xCE
#define KEY_SCROLL_LOCK 0xCF
#define KEY_PAUSE 0xD0
#define KEYPAD_NUM_LOCK 0xDB
#define KEYPAD_SLASH 0xDC
#define KEYPAD_ASTERISK 0xDD
#define KEYPAD_MINUS 0xDE
#define KEYPAD_PLUS 0xDF
#define KEYPAD_ENTER 0xE0
#define KEYPAD_1 0xE1
#define KEYPAD_2 0xE2
#define KEYPAD_3 0xE3
#define KEYPAD_4 0xE4
#define KEYPAD_5 0xE5
#define KEYPAD_6 0xE6
#define KEYPAD_7 0xE7
#define KEYPAD_8 0xE8
#define KEYPAD_9 0xE9
#define KEYPAD_0 0xEA
#define KEYPAD_DOT 0xEB
#define KEYPAD_NONUS_BACKSLASH 0xEC
#define KEYPAD_APPRICATION 0xED
#define KEYPAD_POWER 0xEE
#define KEYPAD_EQUAL 0xEF
#define KEY_F13 0xF0
#define KEY_F14 0xF1
#define KEY_F15 0xF2
#define KEY_F16 0xF3
#define KEY_F17 0xF4
#define KEY_F18 0xF5
#define KEY_F19 0xF6
#define KEY_F20 0xF7
#define KEY_F21 0xF8
#define KEY_F22 0xF9
#define KEY_F23 0xFA
#define KEY_F24 0xFB
#define KEY_EXECUTE 0xFC
#define KEY_HELP 0xFD
#define KEY_MENU 0xFE
#define KEY_SELECT 0xFF
#define KEY_STOP 0x100
#define KEY_AGAIN 0x101
#define KEY_UNDO 0x102
#define KEY_CUT 0x103
#define KEY_COPY 0x104
#define KEY_PASTE 0x105
#define KEY_FIND 0x106
#define KEY_MUTE 0x107
#define KEY_VOLUP 0x108
#define KEY_VOLDOWN 0x109
#define KEY_LOCKING_CAPS_LOCK 0x10A
#define KEY_LOCKING_NUM_LOCK 0x10B
#define KEY_LOCKING_SCROLL_LOCK 0x10C
#define KEYPAD_COMMA 0x10D
#define KEYPAD_EQUALSIGN 0x10E
#define KEY_INTERNATIONAL1 0x10F
#define KEY_BACKSLASH 0x10F
#define KEY_INTERNATIONAL2 0x110
#define KEY_KANA 0x110
#define KEY_INTERNATIONAL3 0x111
#define KEY_YEN 0x111
#define KEY_INTERNATIONAL4 0x112
#define KEY_XFER 0x112
#define KEY_INTERNATIONAL5 0x113
#define KEY_NFER 0x113
#define KEY_INTERNATIONAL6 0x114
#define KEY_PC98_COMMA 0x114
#define KEY_INTERNATIONAL7 0x115
#define KEY_INTERNATIONAL8 0x116
#define KEY_INTERNATIONAL9 0x117
#define KEY_LANG1 0x118
#define KEY_LANG2 0x119
#define KEY_LANG3 0x11A
#define KEY_KATAKANA 0x11A
#define KEY_LANG4 0x11B
#define KEY_HIRAGANA 0x11B
#define KEY_LANG5 0x11C
#define KEY_ZENHAN 0x11C
#define KEY_LANG6 0x11D
#define KEY_LANG7 0x11E
#define KEY_LANG8 0x11F
#define KEY_LANG9 0x120
#define KEY_ALT_ERASE 0x121
#define KEY_SYSREQ 0x122
#define KEY_CANCEL 0x123
#define KEY_CLEAR 0x124
#define KEY_PRIOR 0x125
#define KEY_RETURN2 0x126
#define KEY_SEPARATOR 0x127
#define KEY_OUT 0x128
#define KEY_OPER 0x129
#define KEY_CLEAR_AGAIN 0x12A
#define KEY_CLRSEL 0x12B
#define KEY_EXSEL 0x12C
#define KEYPAD_00 0x138
#define KEYPAD_000 0x139
#define KEYPAD_THOUSANDS_SEPARATOR 0x13A
#define KEYPAD_DECIMAL_SEPARATOR 0x13B
#define KEYPAD_CURRENCY_UNIT 0x13C
#define KEYPAD_CURRENCY_SUBUNIT 0x13D
#define KEYPAD_LEFT_PAREN 0x13E
#define KEYPAD_RIGHT_PAREN 0x13F
#define KEYPAD_LEFT_BRACE 0x140
#define KEYPAD_RIGHT_BRACE 0x141
#define KEYPAD_TAB 0x142
#define KEYPAD_BACKSPACE 0x143
#define KEYPAD_A 0x144
#define KEYPAD_B 0x145
#define KEYPAD_C 0x146
#define KEYPAD_D 0x147
#define KEYPAD_E 0x148
#define KEYPAD_F 0x149
#define KEYPAD_XOR 0x14A
#define KEYPAD_CARET 0x14B
#define KEYPAD_PERCENT 0x14C
#define KEYPAD_LESSTHAN 0x14D
#define KEYPAD_GREATERTHAN 0x14E
#define KEYPAD_AND 0x14F
#define KEYPAD_LOGICAL_AND 0x150
#define KEYPAD_OR 0x151
#define KEYPAD_LOGICAL_OR 0x152
#define KEYPAD_COLON 0x153
#define KEYPAD_HASH 0x154
#define KEYPAD_SPACE 0x155
#define KEYPAD_ATMARK 0x156
#define KEYPAD_EXCLAMATION 0x157
#define KEYPAD_MS 0x158
#define KEYPAD_MR 0x159
#define KEYPAD_MC 0x15A
#define KEYPAD_MADD 0x15B
#define KEYPAD_MSUB 0x15C
#define KEYPAD_MMUL 0x15D
#define KEYPAD_MDIV 0x15E
#define KEYPAD_SIGN 0x15F
#define KEYPAD_CLEAR 0x160
#define KEYPAD_CLEARENTRY 0x161
#define KEYPAD_BIN 0x162
#define KEYPAD_OCT 0x163
#define KEYPAD_DEC 0x164
#define KEYPAD_HEX 0x165
問題点:0x100以上のコードは正しく扱われない。HID.cpp中のKeyboard_::press()が8bitの範囲内でしか扱っていないためと思われる。コードの修正も必要になる。
MacOSXに接続して、Arduino Leonardoに繋いだボタンを押すとシャットダウン画面が出るものを作ってみた。また、pinmode(buttonPin,INPUT_PULLUP); で明示的なプルアップ指示をしてみた。これはArduino IDE 1.0.1からの機能。
/*
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Button
*/
// constants won't change. They're used here to
// set pin numbers:
const int buttonPin = 2; // the number of the pushbutton pin
const int keymacroPin = 3;
const int ledPin = 13; // the number of the LED pin
// variables will change:
int buttonState = 0; // variable for reading the pushbutton status
#define KEY_PRINTSCREEN 0xCE
#define KEY_SCROLLLOCK 0xCF
#define KEY_PAUSE 0xD0
#define KEYPAD_POWER 0xEE
#define KEY_VOLUP 0x108
#define KEY_VOLDOWN 0x109
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT_PULLUP);
pinMode(keymacroPin, INPUT_PULLUP);
Keyboard.begin();
}
void loop(){
if (digitalRead(keymacroPin)==LOW) {
// not implemented
}
// read the state of the pushbutton value:
buttonState = digitalRead(buttonPin);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (buttonState == LOW) {
// turn LED on:
digitalWrite(ledPin, HIGH);
delay(30);
while(buttonState == LOW){
buttonState = digitalRead(buttonPin);
// Keyboard.press(ctrlKey);
Keyboard.press(KEYPAD_POWER);
}
}
else {
// turn LED off:
digitalWrite(ledPin, LOW);
Keyboard.release(KEYPAD_POWER);
}
delay(100);
}
Arduino Leonardo