多くの方がK3NGキーヤーに液晶表示を付加した事例を公開されている。簡単にできるだろうと始めたのだが、嵌ってしまった。
K3NGキーヤーに搭載するLCDはたくさんの線で信号を送る方式ではなく、I2Cという2本線で信号を送る方式だ。そのため、Arduino IDEにもLiquidoCrystal_I2Cというライブラリが必要なのでダウンロードさせてもらい、導入した。そして、スケッチの設定をしてコンパイルをしようとすると、
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); という行でエラー
error: 'POSITIVE' was not declared in this scope と表示さた。
コンパイルされなければ、スケッチの書き込みもできない。そこからが試行錯誤の始まりである。
LCDには内蔵されているコントローラーによっていくつかの種類があるようだ。そこで、ライブラリと適合したLCDなのか確かめた。
まず、LCDを接続したArduino unoにI2C ADDRESS SCANNERというスケッチを書き込み走らせる。シリアルモニターで見るとLCDのアドレスが表示された。
次に、Hello Worldのスケッチに、LCDのアドレスに変更して書き込み、走らせた。正常に”Hello World”が表示されている。このライブラリとLCDで動作することは確かめられた。
K3NGの設定でも同じライブラリが使われている。いろいろ調べていくうちに、LiqudCrystal_I2Cというライブラリにはいくつかの種類があることがわかった。GitHubのライブラリは1.1.1と1.1.2のバージョンがある。私の導入しているのは1.1.2だった。その他I2CLiquidCrystalというものやNewLiqidClrystalというものも見つかった。それらをIDEのライブラリに導入してみたがコンパイルを通すことができなかった。
既にLCDを導入されている方のサイトを詳しく見ると、NewLiquidCrystalを使っているとの記載があった。なぜ私のIDEではうまくコンパイルできないのか悩んだ。ある時、それぞれのライブラリの中をのぞいていると、どのライブラリにも ”LiquidCrystal_I2C.h” というファイルが入っていることに気づいた。同じファイル名のものがあるとプログラムの流れでは支障があるはずである。そこで、複数入っていたI2C関連のライブラリをすべて削除し、一つだけにしてみた。NewLiquidCrystalというライブラリである。この状態でコンパイルを試してみるとすんなり通った。
コンパイルできたK3NG keyerのスケッチを書き込むとLCDに「K3NG Keyer hi」という表示が出た。長いトンネルから出ることができた。
わかってしまえば何ということもないことだが、壁にぶつかっているときには様々な試行錯誤で悩んだ。課題を解決する面白さ、これだからものづくりは止められない。
LCDを付加したキーヤーはコマンドの状態や送出したモールス符号などいろいろ表示してくれる。このキーヤーの機能がもう一つ使えるようになった。