masaruさんがいろいろやってたのに触発されてみた。作りたいものはキーボードショートカットを一発入力する専用キーボード。
買ったもの(@VSTONE ROBOT CENTER):
いろいろ試してみたところ、いくつか購入品に失敗があったが所望のソフトウェア設計は一瞬でできた。Arduino恐るべし。ただ複雑なモノの設計は逆に難しそうな感じはした。しかし、これだけ簡単にできると、人間側のアイデアの有無が露骨に問われる感じ。
失敗した点は以下
買ったもの(@VSTONE ROBOT CENTER):
- Freaduino Micro
- Octopus ADKeypad(結果的に不要だった)
- Octopus Button Switch Brick
- Octopus温度/湿度センサ(LEDモジュールと間違えて購入。。。)
- 激安ブレッドボード
- ジャンパピン60本
- ゲームコントローラ用ボタンx2
- タカチ電機工業 OP-125B OP型開閉プラスチックボックス
いろいろ試してみたところ、いくつか購入品に失敗があったが所望のソフトウェア設計は一瞬でできた。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 件のコメント:
コメントを投稿