完全自作キーボードを創りたい②
前回はこちら
今回は、
1キー キーボード(言いにくいですね)をつくっていきます。
とりあえず1キーキーボード
ここのページを参考に作っていきます。
ブレッドボード回路図
プログラム
#include <Keyboard.h>
bool currentState = HIGH;
bool beforeState = HIGH;
const int inputPin = 2;
const int ledPin = 13;
void setup() {
pinMode(inputPin,INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Keyboard.begin();
}
void loop() {
currentState = digitalRead(inputPin);
if ( currentState != beforeState ) {
if ( currentState == LOW) {
digitalWrite(ledPin, HIGH);
Serial.println("Push!");
Keyboard.press('a');
} else {
digitalWrite(ledPin, LOW);
Serial.println("Release!");
Keyboard.releaseAll();
}
beforeState = currentState;
}
}
書き込む時は、
「ツール」 > 「ボード」から
"Arduino Micro" を選んで下さい。
書き込んで、キーを押してみると、
"a"が入力されるはずです。
日本語切り替えキーボードにしよう
"a"しか打てない
キーボードを改良します。
プログラム
#include <Keyboard.h>
bool currentState = HIGH;
bool beforeState = HIGH;
const int inputPin = 2;
const int ledPin = 13;
void setup() {
pinMode(inputPin,INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Keyboard.begin();
}
void loop() {
currentState = digitalRead(inputPin);
if ( currentState != beforeState ) {
if ( currentState == LOW) {
digitalWrite(ledPin, HIGH);
Serial.println("Push!");
Keyboard.press(KEY_LEFT_ALT); // ここはキーボードによって
Keyboard.press('`'); // 設定を変えてください
} else {
digitalWrite(ledPin, LOW);
Serial.println("Release!");
Keyboard.releaseAll();
}
beforeState = currentState;
}
}
このプログラムだと、Alt + ` を
入力するようになっているので、
Alt + ~ などで
日本語を切り替えている方は直して下さい。
ボタンを押すと、日本語と英語が
切り替えられるようになっています。
これじゃ、分かりにくくない?
せっかく、
自作キーボードをつくるなら、
どっちの言語に
なっているか分かりやすくしたい
ですよね。
変換、無変換キーみたいな
それ、出来ます。
まず、ここを参考にPowerToysをダウンロードします。
ダウンロード出来たら、
Keyboard Managerを開き、
ショートカットの再マップを押します。
「+」を押して、
新しいショートカットを
つくったら、「∨」を押して、
Alt Space → IME Convert
Ctrl Space → IME Non-Convert
になるようにして"OK"を押します。
IME Convertは無変換キー、
IME Non-Convertは変換キーです。
(逆じゃないです。)
これで、設定は終わったので、
回路とプログラムを変更します。
回路図
プログラム
#include <Keyboard.h>
bool currentState1 = HIGH;
bool beforeState1 = HIGH;
bool currentState2 = HIGH;
bool beforeState2 = HIGH;
const int inputPin1 = 2;
const int inputPin2 = 3;
const int ledPin = 13;
void setup() {
pinMode(inputPin1, INPUT_PULLUP);
pinMode(inputPin2, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
Keyboard.begin();
}
void loop() {
currentState1 = digitalRead(inputPin1);
currentState2 = digitalRead(inputPin2);
if ( currentState1 != beforeState1 ) {
if ( currentState1 == LOW) {
digitalWrite(ledPin, HIGH);
Serial.println("key1_Push!");
Keyboard.press(KEY_LEFT_CTRL);
Keyboard.press(0x20);
} else {
digitalWrite(ledPin, LOW);
Serial.println("key1_Release!");
Keyboard.releaseAll();
}
beforeState1 = currentState1;
}
if ( currentState2 != beforeState2 ) {
if ( currentState2 == LOW) {
digitalWrite(ledPin, HIGH);
Serial.println("key2_Push!");
Keyboard.press(KEY_LEFT_ALT);
Keyboard.press(0x20);
} else {
digitalWrite(ledPin, LOW);
Serial.println("key2_Release!");
Keyboard.releaseAll();
}
beforeState2 = currentState2;
}
}
書き込んで、キー1を押すと日本語、
キー2を押すと英語になっていたら
成功です。
次回は
次回は、回路を決定して、
試作してみたいと思います。