LoL Shield のサンプルで文字を表示させる fonttest がありますが、
用意されているのがアルファベットの大文字しかありません。
さらに、 Japanino ではなぜか動きません。
いろいろやってみたら、
どうやらフォントデータをRAM上に置いているようです。
Arduino では、RAMの使用量がオーバーしても何も言わずに動作しなくなってしまいます。
警告を出すとか、使用量を表示するとかやって欲しい物です。
また、Arduino では flash ROM に配置するためには PROGMEM を使わないといけないみたいです。
さらに、それをアクセスするには用意された特別な関数を使わないとダメみたいです。
Font.cpp を見てみるとフォントデータを2次元座標で1ドットずつ配列に入れています。
つまり、1ドットにつき2バイトも浪費しているのです。1文字平均20バイトです。
フォントデータだけでRAMを700バイトくらい使っている訳です。
RAMが1KBしか無いJapanino(ATMega168)では無理だった様です。
そこで、私はLCDのフォントをビットマップで入れてみることにしました。
5x7ドットなので1文字5バイトで済みます。
このデータは手作業で入れると大変なので、Excelで作ることにしました。
こちらはオリジナルのフォントですが、
ベータ版だからかSTRANGE BUG のせいか小文字には魂が入っていませんね。
こうやって作ったフォントをflash ROMに配置してやってみました。
ご覧の通り、Japaninoでも動くようになりました。
Fontやスケッチはこちら。
90°回転する関数も用意されていますが、
やってみるとアルファベットには向いていないような気がしますが、なんのために用意したのでしょうか?
カタカナでも縦書きフォントにしないとうまくいきません。
用意されているのがアルファベットの大文字しかありません。
さらに、 Japanino ではなぜか動きません。
いろいろやってみたら、
どうやらフォントデータをRAM上に置いているようです。
Arduino では、RAMの使用量がオーバーしても何も言わずに動作しなくなってしまいます。
警告を出すとか、使用量を表示するとかやって欲しい物です。
また、Arduino では flash ROM に配置するためには PROGMEM を使わないといけないみたいです。
さらに、それをアクセスするには用意された特別な関数を使わないとダメみたいです。
Font.cpp を見てみるとフォントデータを2次元座標で1ドットずつ配列に入れています。
つまり、1ドットにつき2バイトも浪費しているのです。1文字平均20バイトです。
フォントデータだけでRAMを700バイトくらい使っている訳です。
RAMが1KBしか無いJapanino(ATMega168)では無理だった様です。
そこで、私はLCDのフォントをビットマップで入れてみることにしました。
5x7ドットなので1文字5バイトで済みます。
このデータは手作業で入れると大変なので、Excelで作ることにしました。
こちらはオリジナルのフォントですが、
ベータ版だからかSTRANGE BUG のせいか小文字には魂が入っていませんね。
こうやって作ったフォントをflash ROMに配置してやってみました。
ご覧の通り、Japaninoでも動くようになりました。
Fontやスケッチはこちら。
90°回転する関数も用意されていますが、
やってみるとアルファベットには向いていないような気がしますが、なんのために用意したのでしょうか?
カタカナでも縦書きフォントにしないとうまくいきません。
以前作った16セグメントのDIP SWのパターンもExcelでした。
プログラム用に使うにはHEXが使えるようにしておくことが吉です。