レトロでハードな物語

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

大きな電卓にアカウント管理の機能を追加する その4

2020年07月28日 | 電子工作

前回作成したSDカードバックアップのスケッチを大きな電卓に移植してみました。

I2Cマスター側のスケッチにSDカードに余分な32バイトを書き込んでしまうバグがあったので、大きな電卓に移植するときに修正しておきました。I2CスレーブとなるPro Miniのスケッチは前回のもの(I2CSDslave.ino)と一緒です。
また、大きな電卓の基盤にI2C接続用のピンソケット(SCL・SDA・VCC・GND)を追加して、I2CスレーブとなるPro Miniを接続できるようにしました。

前回のテスト環境のATmega328Pを大きな電卓に替えて動作確認をしてみると、きちんとアカウントデータのバックアップとリストアが行えました。



SDカードの読み書き機能を加えて、アップデートした大きな電卓のスケッチはこちらです。

DigitClass.h

ATmega328PassManager.ino

使用方法は、電源投入後の電卓モードでM-かM+キーを押してメニューモードに入り、アカウントデータのバックアップを行うときはEEPROM Backupを、リストアを行うときはEEPROM Restoreを選択します。



SDカードがつながったPro Miniと接続してあれば、バックアップまたはリストアを行い電卓モードに戻ります。SDカードに書き込むときなどにエラーチェックは行っていません。何か問題が起きたら電源を落として配線を確認すればいいやという姿勢です。Arduinoはこのあたり簡単に扱えていいですね。

今回の修正により選択メニューは以下のように増えています。

Password Manager
Password Setting
EEPROM Backup
EEPROM Restore
Calculator
GAME

バックアップ・リストア以外の操作は以前と変わりません。

SDカードに書き出したデータは半角英数カナのテキストデータになっています。半角カナは1バイトのデータで出力されますが、UTF8では半角カナは3バイトのデータになります。Arduinoの開発に使用しているUbuntuではUTF8が標準ですが、テキストエディタでは文字コードの指定で1バイトの半角カナも扱うことが出来ます。
しかし、リストアするデータは1行16文字で文字が入っていない部分は空白文字で埋めるように整形する必要があるので半角カナをUTF8に、UTF8の半角カナを1バイトコードに変換するプログラムを作ってみました。

atou.cpp
utoa.cpp
Makefile

使い方は以下のようになります。

●SDカードに書き出されたテキストデータPASSMGR.TXTをUTF8に変換

atou PASSMGR.TXT

これによりUTF8に変換されたPASSMGR_UTF.TXTが出力される。

●UTF8で書かれた半角カナを含むPASSMGR_UTF.TXTを1バイトのコードに変換

utoa PASSMGR_UTF.TXT

これにより1行16文字で空白文字でスペースを埋めたPASSMGR.TXTが出力される。
変換前のテキストが1行16文字を超えているときは、先頭から16文字のみ有効。16文字以下の場合は空白文字で埋める。
Linuxの改行コードはLFだが、一応Arduinoのライブラリに合わせてCRLFに変換している。ただしPro Miniのスケッチではどちらの改行コードでも動作するようにプログラムしてある。


これらのプログラムはUbuntuで動作確認しています。ちなみに、カナ文字を使わないのであれば変換プログラムは必要ありません。(英数字はUTF8でも1バイト)

これで大きな電卓のアカウントデータをPCで入力できるようになり、大量のデータを入力するのも簡単になりました。最初に大きな電卓を改造してからここまで時間がかかってしまいましたが、やっと使えるものが出来ました。電源を投入してすぐに利用できるので、手近に置いておくと結構便利です。

使用しているATmega328Pのフラッシュメモリも残り20%になりました。大きな電卓の機能追加はとりあえずこれくらいにしておきましょう。正月に秋月電子で購入したお楽しみ袋に入っていたPICがまだまだ沢山残っているので、今度はPICでなにかしてみたいと思います。



最新の画像もっと見る

コメントを投稿