curious4dev

色々ダメなandroidアプリを開発したい会社員 高橋が綴る、androidアプリ開発やArduinoについて

*

【完成】PCからシリアル通信でEEPROM書き込み

 

お疲れ様です。高橋です。

PCからシリアル通信を介して楽曲データをEEPROMに書き込むのがなかなか上手く行かなかったのですが、試行錯誤の末、完了しました。

全体の流れ

SMFをYMZ用に変換したコードを、javaで書いたプログラムで読み込み、バイナリに変換し、シリアル送信します。それをArduino側が受信し、EEPROMに書き込みます。

062801

この中で問題は2箇所ありました。

過酷なデバッグ

PCとArduinoがデータのやりとりのためにシリアルポートを使ってしまうので、外からどんなデータが授受されてるのか覗き見できなく、デバッグは大変。

データをシリアル受信したりEEPROMに書き込んだらLEDが光るようにしました。

IMG_5848

Javaでのシリアル通信

最終的に動作したコードは下記の通りです。

修正点は

  1. シリアル通信用のoutputstreamを作った後に5000のsleepを挟んだ
  2. char配列に与えるデータの型をそもそもミスってた

の2点でした。

Arduino側のSerial.read()とMEM.Write()

最終形のArduino側のEEPROM書き込みスケッチは下記の通りです。

また火傷

EEPROMへの書き込みが成功したら、読み込み用に待機させといたArduinoのブレッドボードにEEPROMを差し込みます。流れてくるファイナルファンタジー2の戦闘テーマを聞いて、疲れが吹っ飛びました。

楽曲を何回か差し替えている時、EEPROMを上下逆に刺してしまい、触れないほどの熱を発し、また火傷してしまいました。幸い、EEPROMは壊れずに済みました。火傷する程の熱が出てるのに壊れないなんて、超頑丈。

今後

今回の楽曲データは、音階と長さと休符だけをバイナリ化しているだけなので、曲の最初にメタデータとして曲のテンポとエンベロープのデータ、そして繰り返しポイント用のデータを混ぜたものに変更しようと思います。

それと、書き込みのためだけにArduino Pro Miniを使うのはもったいないので、AVRマイコンをそのまま使えないかなーと思っています。

スケッチの容量は4Kbyte以下で、メモリが403byteです。これを満たす生マイコンは無いかな・・・と探してみたところ、2ドルのPro Miniより安いAVRは日本で買えない事がわかったため、大人しくPro Miniを使い続けます。

 

 

以上、よろしくお願い致します。

 - 電子工作

  関連記事

シフトレジスタLED付きのYMZ294回路をFritzingに起こしてみた。

お疲れ様です。高橋です。 ユニバーサル基板で作ったYMZボードと、音階LED及び …

webからUSBカメラ+Raspberry Pi

お疲れ様です。高橋です。 The Internetから、RaspberryPiの …

音階LEDの再設計

お疲れ様です。高橋です。 本日帰宅途中に電車をぼーっと待っている時、ふと、音階L …

4桁7セグLEDを基板に実装

お疲れ様です。高橋です。 昨日に引き続き今日も奇跡的に早く帰宅する事が出来たため …

aitendoで買った375円のバックライト付きI2C LCDで文字を表示してみた。

お疲れ様です。高橋です。 ちょっと前にaitendoで買ったバックライト付きのL …

Arduino+EEPROM+YMZ294で曲の抜き差し

お疲れ様です。高橋です。 I2Cの256KBitなEEPROMに曲データを書き込 …

ルンバにスピッツを演奏させてみた

お疲れ様です。高橋です。 家にあるルンバにArduinoを挿して、スピッツの「涙 …

満員電車内でのオナラと検知 #4

お疲れ様です。高橋です。 硫化水素センサーが到着しました。結構前に到着していたの …

赤外線リモコンをケースに格納

お疲れ様です。高橋です。 先日作ったATtiny13Aの赤外線リモコンを、ケース …

クオーツ時計を100倍速&リバースモード付きに改造してみた。

お疲れ様です。高橋です。 今日、奥さんから壊れた時計を貰いました。電池を入れ替え …