このブログを検索

2015-01-05

Arduino Micro買ってみた

masaruさんがいろいろやってたのに触発されてみた。作りたいものはキーボードショートカットを一発入力する専用キーボード。




買ったもの(@VSTONE ROBOT CENTER):

買ったもの(@千石電商)

いろいろ試してみたところ、いくつか購入品に失敗があったが所望のソフトウェア設計は一瞬でできた。Arduino恐るべし。ただ複雑なモノの設計は逆に難しそうな感じはした。しかし、これだけ簡単にできると、人間側のアイデアの有無が露骨に問われる感じ。

失敗した点は以下
  • LED Brickと間違えて温湿度計を買ってしまった
  • OctopusのBrickは3ピンのケーブル接続が標準になっているが、Microにはそれに対応するピンがないので簡単接続できない。ブレッドボードとジャンパピンで接続するしかない
  • ADキーとかボタンスイッチとかは不要だった。Arduino側に内蔵プルアップ抵抗があるので、短絡するだけでキーが実現できる
とりあえず下記のような感じでコードを設計。ループ毎にウエイトが入っているのは、デジタル入力にチャタが生じてしまうため。

/*
 Shortcut Keyboard for Arduino Leonaldo/Micro
 written by Keiji Okamoto
 
 Based on following sample:
 http://www.arduino.cc/en/Tutorial/InputPullupSerial
 */

void setup(){
  //start serial connection
  Serial.begin(9600);
  //configure pin2 as an input and enable the internal pull-up resistor
  pinMode(2, INPUT_PULLUP);
  pinMode(3, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  //initialize keyboard
  Keyboard.begin();
}

void loop(){
  //read the pushbutton value into a variable
  int firstkey = digitalRead(2);
  static int last_first_key = -1;

  int secondkey = digitalRead(3);
  static int last_second_key = -1;

  //print out the value of the pushbutton
  
  // Keep in mind the pullup means the pushbutton's
  // logic is inverted. It goes HIGH when it's open,
  // and LOW when it's pressed. Turn on pin 13 when the 
  // button's pressed, and off when it's not:
  if (firstkey == HIGH && last_first_key != firstkey) {
    //key released
    digitalWrite(13, LOW);
    Keyboard.releaseAll();
    last_first_key = firstkey;
    
    Serial.print(F("FirstKey="));
    Serial.println(firstkey);
  } 
  else if(firstkey == LOW && last_first_key != firstkey) {
    digitalWrite(13, HIGH);
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('m');
    last_first_key = firstkey;

    Serial.print(F("FirstKey="));
    Serial.println(firstkey);
  }

  if (secondkey == HIGH && last_second_key != secondkey) {
    //key released
    digitalWrite(13, LOW);
    Keyboard.releaseAll();
    last_second_key = secondkey;

    Serial.print(F("SecondKey="));
    Serial.println(secondkey);
  } 
  else if(secondkey == LOW && last_second_key != secondkey) {
    digitalWrite(13, HIGH);
    Keyboard.press(KEY_LEFT_GUI);
    Keyboard.press('l');
    last_second_key = secondkey;

    Serial.print(F("SecondKey="));
    Serial.println(secondkey);
  }
  
  delay(33);
}
ソフトはこれくらいでいいので、次はハードの加工(ケースを加工してボタンを入れる)に取り組む予定。

0 件のコメント: