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キーコードが送れない仕様だったので、このサイトにあるソースコードを流用させていただきました。
ここ以外に「英数/かな」のキーコードが説明されているサイトは見つけられなかった。