PIC32MM0064GPL028 + SSD1306(GM009605) でアニメーションを表示させて遊んでいる。
「PIC32MM0064GPL028 + SSD1306(GM009605)」
Blenderで用意したたとえばこんなアニメーションを表示させたい。
基本はパラパラ漫画の要領なので以下の手順だ。
1.画像はBlenderでレンダリングする。
2.XnViewでリサイズする。
3.ImageConverter (Mono)でCのデータ・ファイルに変換する。
ちなみに上の動画は、AviUtlに読み込んで動画にしたものだ。
LCDではピクセル数が格段に少ないので、もっとギザギザな残念な動画にはなる。
それでも絵が動くと妙に楽しい。
楽しいが、LCD用の画像の準備となると上の3の段階が1枚ずつ手作業なので非常に煩雑だ。
この例では30枚なので30回同じことの繰り返しは結構面倒くさい。
2の手順のときに2値化もして、ついでにBMPファイルに変換してしまったらどうだろう。
そのままバイナリ・データを読みだしてCのデータ・ファイルに変換できるんじゃないの?
と考えた。
この段階で分かっていて(思い込んでて)考慮したことは以下の2点。
1.ヘッダの部分だけ読み飛ばせばそのままHEXとして出力すればいい。
2.画像は上下の順が逆になってファイルに書かれている。
VB6でコマンド・ライン用の実行ファイルを作り、ファイル名に合わせてバッチ・ファイルを書いて実行した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Project1.exe d0001.bmp d0001.c Project1.exe d0002.bmp d0002.c Project1.exe d0003.bmp d0003.c Project1.exe d0004.bmp d0004.c Project1.exe d0005.bmp d0005.c Project1.exe d0006.bmp d0006.c Project1.exe d0007.bmp d0007.c Project1.exe d0008.bmp d0008.c Project1.exe d0009.bmp d0009.c Project1.exe d0010.bmp d0010.c Project1.exe d0011.bmp d0011.c Project1.exe d0012.bmp d0012.c Project1.exe d0013.bmp d0013.c Project1.exe d0014.bmp d0014.c Project1.exe d0015.bmp d0015.c Project1.exe d0016.bmp d0016.c Project1.exe d0017.bmp d0017.c Project1.exe d0018.bmp d0018.c Project1.exe d0019.bmp d0019.c Project1.exe d0020.bmp d0020.c Project1.exe d0021.bmp d0021.c Project1.exe d0022.bmp d0022.c Project1.exe d0023.bmp d0023.c Project1.exe d0024.bmp d0024.c Project1.exe d0025.bmp d0025.c Project1.exe d0026.bmp d0026.c Project1.exe d0027.bmp d0027.c Project1.exe d0028.bmp d0028.c Project1.exe d0029.bmp d0029.c Project1.exe d0030.bmp d0030.c |
3に書いたサイトでちまちまやると結構の時間と手間だが、これならものの数秒で30枚の処理が済む。
MPLABX側でのファイル名に合わせてあるので、そのままファイルを上書きしてビルドして実行するとこうなる。
データの配列が何か間違ってるんだな。
で、思いつくところでLCDの設定の以下を変更した。
1 2 3 |
OLED_command(OLED_MEMORYMODE); //0x20 //OLED_command(0x00); //0x00 Horizontal addressing mode OLED_command(0x01); //0x01 Vertical addressing mode |
すると今度はこうなる。
明らかに90°回転してしまっている。
なので、XnViewで加工する際に90°回転も加えてみる。
するとこうなる。
これでImageConverter (Mono)で変換した時の結果と全く同じアニメーション用のデータが手軽に短時間で用意できたことになる。
現状の分かる範囲での最速の設定にするために、i2c_master.hで以下
1 2 3 4 5 6 |
/****************************************************************************** * This parameter is a quarter of I2C clock period in instruction cycles. * It defines timing for I2C interface. I2C MAY NOT WORK IF THIS PARAMETER IS * WRONG (CLOCK IS TOO FAST). */ // .equ I2C_CLOCK_DELAY, 100 .equ I2C_CLOCK_DELAY, 1 |
を書き換えるとこんな感じ。
XnViewは処理をスクリプトに書いておける
ので実質以下の手順で済む。
1.Blenderで動画用の画像をレンダリングする。
2.XnViewで画像を2値化、リサイズ、回転する。
3.VB6のプログラムでC用のデータ・ファイル化する。
4.MPLABXのプロジェクト・フォルダにコピーする。