2ボタンキーボード¶
週間アスキー で紹介されていた、英数/かなキーボード for Macintosh をパクってArduinoで作ってみた。
ハードウェア¶
ハードウェアは2つのボタンを"Arduino Leonardo"のPin13とPin12につないだだけ。
プルアップ抵抗もソフトウェアでONにするので、ハードウェア側には無し。
作図がメンドクサイので図は無し。
ソフトウェア¶
Arduino IDEに付属のKeyboardライブラリだと「英数/かな」キーコードが送れない仕様だった。
生のキーコードが送れるソースコード が公開されていたので、そのコードを利用して以下のようなコードを書いた。
#include "USBrawkeyboard.h"
USBrawkeyboard rawkybd;
#define RIGHT_KEY_CODE 0x90
#define LEFT_KEY_CODE  0x91
const int kRightSwitch = 12;
const int kLeftSwitch  = 13;
int gPreviousRightSwitchState = 0;
int gPreviousLeftSwitchState  = 0;
void setup()
{
  pinMode(kRightSwitch, INPUT_PULLUP);
  pinMode(kLeftSwitch, INPUT_PULLUP);
  delay(1000);
  gPreviousRightSwitchState = digitalRead(kRightSwitch);
  gPreviousLeftSwitchState  = digitalRead(kLeftSwitch);
  Keyboard.begin();
  rawkybd.begin() ;
  delay(1000);
}
void loop()
{
  int theRightSwitchState = digitalRead(kRightSwitch);
  int theLeftSwitchState  = digitalRead(kLeftSwitch);
  if( theRightSwitchState != gPreviousRightSwitchState )
  {
    if( theRightSwitchState == LOW )
    {
      rawkybd.press(RIGHT_KEY_CODE);
    }
    else
    {
      rawkybd.release(RIGHT_KEY_CODE);
    }
    gPreviousRightSwitchState = theRightSwitchState;
  }
  if( theLeftSwitchState != gPreviousLeftSwitchState )
  {
    if( theLeftSwitchState == LOW )
    {
      rawkybd.press(LEFT_KEY_CODE);
    }
    else
    {
      rawkybd.release(LEFT_KEY_CODE);
    }
    gPreviousLeftSwitchState =      theLeftSwitchState;
  }
  delay(100);
}
コチラからダウンロード出来ます。 sketch_apr14a.zip
今のところ入力モードの切り替えしか出来ないのでホンノリ便利に使えるMacOSX側のユーティリティーが出来ないか妄想中。
参考文献¶
Arduino IDEに付属のKeyboardライブラリだと生のUSBキーコードが送れない仕様だったので、このサイトにあるソースコードを流用させていただきました。
ここ以外に「英数/かな」のキーコードが説明されているサイトは見つけられなかった。
Comments
comments powered by Disqus