自作キーボードの極み「モールス信号キーボード」注目デバイスで組み込み開発をアップグレード(7)(2/2 ページ)

» 2022年11月24日 07時00分 公開
[今岡通博MONOist]
前のページへ 1|2       

「OneKey」のプログラム

 プログラムはArduino IDEで開発しました。コード全体は以下のリポジトリを参照してください。

https://github.com/imaoca/OneKey/blob/master/CW_Decoder.ino

 プログラムの動作を大まかに説明すると、タクタイルスイッチのオンからオフの間隔をms単位で測定し短点と長点を判別します。短点は“.”、長点は“-”とし、それらを文字列としてつなげていきます。一定時間タクタイルスイッチが押下されないと文字の区切りと判定します。そして、短点と長点の文字列をアルファベットと数字に変換します。これをキーボードの出力としてPCに送るのです。

 それではリスト1に示した1〜6行までのコードを見ていきましょう。1行目のインクルード文でこのプログラムからキーボードのエミュレーションを行う機能が使えるようになります。2行目のtで始まる変数はタクトタイルスイッチのオン/オフの時間を測定するのに使われます。3行目でタクタイルスイッチの入力ピンを指定します。4行目はGPIOを出力ピンとして使います。LEDを接続するとタクタイルスイッチの打鍵を視覚的に確認できます。ブザーを接続すると打鍵を音で確認できます。ただ、今回示した回路図や写真ではこれらは省かれています。6行目が判定された短点と長点が格納される文字列です。

#include "Keyboard.h"
unsigned long signal_len,t1,t2,t0;
int inputPin = 9;
int ledPin = 4;  
int sp;
String code = "";
リスト1 OneKeyのプログラムの一部

 リスト2は11行目のピンモードの設定です。この命令によりGPIOの9番ピンを入力ピンに設定するのと同時にAVRマイコン内部でプルアップしています。これで外付けの抵抗は不要になります。ちなみにタクタイルスイッチが押された時の入力値は0、スイッチが押されてないときが1となります。

pinMode(inputPin, INPUT_PULLUP);
リスト2 ピンモードの設定

 ここからはコード全体から重要な箇所をかいつまんで説明します。

 46行目のreadio()関数は、短点と長点の判定を行っています。20m〜200msまでが短点で、300ms以上は長点と判定します。“.”あるいは“-”が戻り値となります。

 58行目のconvertor()関数では、短点と長点の文字列からアルファベットと数字に変換しています。

 17行目からはメインループ関数です。長点あるいは短点の間の時間を計測して先ほどのreadio()関数とconvertor()関数を呼び出します。2000ms以上タクタイルスイッチが押されなければスペースを挿入します。スイッチが500ms以上押されなければ文字の区切りと判断します。

 これらのタイミングのパラメーターは打ち心地に影響しますので、各自で調整する必要があるかもしれません。

使い方

 使い方は至って簡単で、ArduinoにArduino IDEでプログラムを書き込んだ後、PCにUSBケーブルで接続します。HIDなのでデバイスドライバなどのインストールは必要ありません。後はメモ帳などを開いてモールス符号を打鍵すると、文字変換して表示されるはずです。

おわりに

 いかがでしたでしょうか。今回は温故知新というテーマで原稿を書いてみました。モールス信号は、おそらく最も古いデジタル通信の一つといえるでしょう。また、福祉情報工学の分野ではろうあ者(視覚と聴覚の障害者)とのコミュニケーション手段としてモールス信号を使う研究もなされているようです。

 モールス信号は、従来の用途でその使用頻度は減りましたが、新たなコミュニケーション手段や新たなユーザーインタフェースとして脚光を浴びる日が来るかもしれません。今回紹介したOneKeyは決して実用的といえるものではなくむしろネタですが、この記事がモールス信号のより実用的な使い方を考えるきっかけになれば幸いです。

前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.