見出し画像

完全自作キーボードを創りたい②

前回はこちら

今回は、
1キー キーボード(言いにくいですね)をつくっていきます。

とりあえず1キーキーボード

ここのページを参考に作っていきます。

ブレッドボード回路図

画像2

プログラム

#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;
 }
}

画像2

書き込む時は、
「ツール」 > 「ボード」から
"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をダウンロードします。

ダウンロード出来たら、

画像3

Keyboard Managerを開き、

画像4

ショートカットの再マップを押します。

画像5

「+」を押して、
新しいショートカットを
つくったら、「∨」を押して、

Alt  Space → IME Convert
Ctrl Space → IME Non-Convert

になるようにして"OK"を押します。

IME Convertは無変換キー、
IME Non-Convertは変換キーです。

(逆じゃないです。)

これで、設定は終わったので、
回路とプログラムを変更します。

回路図

画像6

プログラム

#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を押すと英語になっていたら
成功です。

次回は

次回は、回路を決定して、
試作してみたいと思います。


いいなと思ったら応援しよう!