レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

電卓プログラムを移植してみた

2020年05月17日 | 電子工作

この前完成した「大きな電卓」の電卓スケッチですが、とりあえず使い物になりそうなので以前作った赤外線リモコンデバイスに移植してみようと思い立ちました。

移植するにあたって、これまでリモコン操作の表示に使用していた小型OLEDを秋月電子で購入した16x2行のI2CのLCD(AE-AQM1602A(KIT))に変更してみます。LCDだと解像度が一緒で移植が簡単になるということもあるのですが、見た目的にしっくり来るので前から使いたかったのです。

 

以前もLCDを試したのですが、使用している途中で画面が消えるなど安定性に問題があったので安定動作するOLEDを使っていました。せっかくなので、再びLCDにチャレンジしてみます。
それぞれのディスプレイのピン配置が異なるので配線を変更してLCDをつなぎ動作テストを行ってみると、なんの問題もなく表示してくれました。長時間使用しても画面が消えず安定動作しています。以前動作しなかったのはなんだったんでしょうか。
配線かスケッチの問題かプルアップ抵抗の問題なのか今となっては分かりません。まあ、結果オーライということで作業を続けます。

この赤外線リモコンはほぼ毎日使用しているのでバグや使いにくい点などは多少改良はしてきたのですが、今回のディスプレイ変更で表示関連を書き直すついでにスケッチ全体を見直すことにしました。
変更部分はたくさんあるので細かい変更点については触れませんが、一番変更したのはゲームです。スケッチの大部分を書き換えました。LCDの16桁の画面をフルに使えるようにアレンジしてあります。敵の表示範囲が広がったので、もとのゲームとはかなり違った感じになりました。



難易度はゲーム序盤は以前より簡単で、先へ進むほど極端に難しくなった感じです。丁度いいゲームバランスがわからないので、スケッチ中の#define SHOT 40で弾数を#define ENEMY 30で敵の数を簡単に調整できるようにしました。高得点を出すコツとしては、敵をなるべくひきつけてから撃つほうが得点が高いので、序盤は敵をなるべく砲台近くで撃ち、敵の動きが早くなったら画面にたくさん表示されている数字から連続して消していき操作に余裕をもたせるといった感じでしょうか。

さて、移植する電卓スケッチですが、「大きな電卓」をしばらく使用していて気になる点がいくつも出できました。そこで今回の移植にあたって以下のように修正しました。

・演算後のlong long intのオーバーフローチェックが甘かったのを、厳密にチェックするようにした。
・除算以外の演算では小数部含めて16桁(16文字)をこえると表示エラーとしていたのを、全ての演算で画面に収まらない小数部は切り捨てて表示するようにした。
・数値をスタックに積むときに、末尾が.(ドット)のままだったり小数点以下がすべて0でもそのまま積んでいたのを修正するようにした。
・小数点を含む数値の表示バグを修正

かなりスケッチに手を入れたので新たなバグがいくつか発生しましたが、気が付いたものに関しては一通り修正しました。でも小数点表示の処理は複雑なので、まだおかしなところがあるかもしれません。あとは使用中に発見したら直していきます。

作成したスケッチはこちらです。

DigitClass.h
ATmega328IRremoconLCD.ino

この赤外線リモコンに使用したテンキーのキーは大きな電卓より数が少ないので、移植にあたってパーセント計算や1桁削除などの機能は省きました。それ以外の変更はキー入力と画面表示の部分のみです。以前の手抜きの簡易電卓とは違ってまともな電卓になったので、このリモコンデバイスの実用度が増したようです。

移植作業はそれほど手間取ることもなかったので、今度は赤外線リモコンのゲームを大きな電卓に移植してみました。こちらもキー入力と画面表示の変更だけで済みました。



スケッチはこちらです。

DigitClass.h
ATmega328BigCalc.ino

電源投入直後は電卓の画面で、M+かM-を押すとメニューを表示してゲームを選択できるようにしてみました。



メニューの選択はM+とM-でカーソルの上下、=キーでメニュー選択としました。ゲームのキー操作は数字の選択を=キーにショットを+キーに割り当てました。手に持って遊ぶ赤外線リモコンと違い、こちらは机上に置いて遊ぶので、キー入力が素早く行えて遊びやすくなった感じです。

「大きな電卓」も赤外線リモコンもまだフラッシュメモリの容量半分くらいしか使用していないので、まだまだ色々な機能を追加して行きたいと思います。



最新の画像もっと見る

コメントを投稿