こちらの記事の続きです。
今回は、重量感のある大理石の電鍵、Hi-MOUND HK-808を、iPhoneに接続して、モールス信号練習アプリMorse Maniaで使ってみました。縦振り電鍵を使うのは初めてだったのですが、安定していて打ちやすいです。練習がはかどります。
縦振り電鍵を探す
前の記事では、iPhoneモールス練習アプリMorse Maniaに2パドル電鍵を接続しました。
今度は、縦振り電鍵も接続したいと考えました。どうせ接続するなら、重厚な本格的な電鍵が良いと思い、Hi-MOUNDのHK-808を探しました。電信マニアの方々のどこのブログでも絶賛で、最高の打ち心地と書かれてます。台座は大理石、支持軸はボールベアリングという豪華な造りですが、すでに製造終了の製品です。オークションサイトに出品されても人気で高価になってしまってたのですが、手頃な価格でフリマサイトに出品されたばかりのものを入手できました。
台座は大きめの大理石で、全体の重量は1,027gでした。前回使った鋳鉄製のカツミ電機KM-22は1,230gでした。鉄の比重は大理石の2.9倍くらいで重いです。でも、縦振り電鍵は、パドル電鍵と違い縦操作するので、十分な重さで安定していてす。
自作USBアダプタに接続する
これを前回、Pro Micro互換基板で作成した自作USBアダプタに接続します。Pro Microの7番、8番、GNDピンから線を引き出しているのですが、その7番とGNDを、HK-808の端子に接続しました。8番とGNDでも動作します。回路図を書くまでもないですが、一応こんな感じです。
2パドル電鍵を使った前回の記事で、右側パドルに接続していたケーブルは、今回は使いません。丸めてあります。
プログラム
Pro Microに書き込んだプログラムを以下に示します。前回の記事のプログラムと全く同じです。詳しい説明はそちらをご覧ください。簡単に説明すると以下です。
- 電鍵のスイッチをオブジェクトに見立てて、MorseSwitchというクラスを作っています
- setup()では、このクラスのコンストラクターを呼んで、左右パドルスイッチに対応するインスタンスを作ります
- loop()の中からそれぞれのインスタンスのhandle()メソッドを呼び出すと、
- スイッチ状態に変化があった場合にキーボードキーのコードをUSBに送出します
- チャッタリングが発生する可能性のある期間は、handle()は何もしません
- スイッチに変化のない場合も、handle()は何もしません
//Morse key to USB keyboard converter for Morse Mania app.
//2 paddle key: pin7<-->left paddle, pin8<-->right GND<-->common
//straight key: pin7 or pin8<-->key, GND<-->common
#include "Keyboard.h"
//class for a Morse key switch
class MorseSwitch {
static const int chatlength=20; //key-chattering duration in msec
int pin; //connected Arduino I/O pin
char key; //assigned keyboard-key ('a', 's', space...)
int prevLevel=HIGH; //previous Arduino-pin level (HIGH or LOW)
unsigned long chatstart=0; //time when key-chattering may have started
public:
MorseSwitch(int arduino_pin, char keyboard_key) {
pin=arduino_pin;
key=keyboard_key;
pinMode(pin, INPUT_PULLUP); //pull-up mode
}
//read the Arduino pin and send a keyboard-key if pin changed
void handle() { //called from loop().
unsigned long timenow=millis(); //time now in ms
if((timenow - chatstart) < chatlength) return; //chattering, do nothing
int newLevel = digitalRead(pin); //now stable, read this pin
if(prevLevel==newLevel) return; //no change, do nothing
prevLevel=newLevel;//update this previous pin-level
chatstart=timenow;//update chattering-start-time
if(newLevel == LOW) { //switch is pressed
Keyboard.press(key);
}
else { //newLevel == HIGH, then switch is released
Keyboard.release(key);
}
}
};
MorseSwitch *leftPaddle, *rightPaddle;
void setup() {
Keyboard.begin();
leftPaddle = new MorseSwitch(7,'a');
rightPaddle = new MorseSwitch(8,'s');
}
void loop() {
leftPaddle->handle(); //read left and send USB key
rightPaddle->handle();//read right and send USB key
}
動作確認
縦振り電鍵を使うのは初めてだったのですが、打ち心地は想像以上に良かったです。電鍵の重量があるので、安定してます。使い心地にこだわって作られた道具は素晴らしいと感じました。使っている動画を添付します。
まとめ
前回の2パドル電鍵に続いて、今回は縦振り電鍵をiPhoneに接続して、Morse Maniaアプリで使ってみました。2パドル電鍵は、信号長さが一定ですし、楽ですね。一方で、縦振り電鍵は、手数が増えるけど、思い通りに打つ感じがします。車のオートマチックとマニュアル変速みたいな関係かなと思いました。
