経緯
ここ、1~2週間はハマっていた内容がM5Core2から吐き出されるデータを液晶画面に表示して普通にスクロールアウトさせること。
まあ、当たり前すぎて誰も気に留めてないと思うが、エディタやWORDやEXCELでも、PageDownや↓キーで画面が上に移動していって次のデータが表示される機能である。
これをプログラム的に実行しようとすると画面内のデータをすべて記憶しておかないと再描画できない。昔のWindowsOS前のDOSパソコンであれば、FONT幅が等倍に
なっており縦x横の文字数を記憶して置けば再描画ということで文字コードとして処理できた。現在、リッチテキスト(死語?)ではないが、装飾までいかなくても、Fontのプロポーショナルで1行の文字数がバラバラになる。また、UTF-8という、可変長文字コード問題もある。かといって、Frameバッファをカラーで使えばpixelとして管理できるが潤沢に使えるほど大きいRAMがないことは、描画のスプライト機能を使っていればわかる。そこで、そもそもスクールくらいハードウエアコマンドでできないのか?と、調べた結果。
Vertical Scrolling機能を使えば出来そう。
罠
罠1 公開資料の間違い
M5Stack Core2のLCDコントロールICは、ILITEK ILI9341ではなく『ILI9342C』らしい。 液晶パネルを剥いて確かめてないのでわからないがM5Stackシリーズは前からこれみたい だ。ホントになってコッタい。M5公式のページから指定されているのはILI9341のデータ シートだから。その仕様書を読んで解析してたのに。 何とかの法則なのか丁度公式ページの更新があった。この苦労っていったい。。。
罠2 仕様書のあいまいさ(デメリットは、直接書かない)
hardscrollコマンドは、1方向固定らしい。つまり、ILI9341は、縦長方向。ILI9342C は、横長方向の時のみ有効。実際は、ILI9342C 240lineスクロールになっていてオリジナル サンプルプログラムは、ILI9341用なので240x320で縦長default設定320lineスクロールに なっている。このことは、サンプルのコメントにはsetRotation(0)じゃないと動かないと 書いてある。が実際は0,2,4,6の縦長でないと動かないである。どちらにしても、M5Stack では動作しない。
ILI9341
予期しない画像が表示されない限り、この設定は禁止されています。つまり、M5Stackシリーズは、ILI9342Cなので、下の仕様通り合計320の値では動作しない
ILI9342C
M5Sackシリーズの横長画面では240になるように設定しなければならない。240より大きい320で動いてないので240mustなんでしょう
罠3 TFT_eSPIのドライバの定義(後から出てきたシリーズは亜種扱い)
M5StackシリーズのTFT_eSPI液晶ドライバ定義 In_eSPI_Setup.hでILI9341_DRIVERを 指定している。ILI9342Cは、ILI9341の亜種扱いで一部パラメータを変更する程度で対応 できるので、ILI9342C_DRIVERがないのであろう。ゆえに、勘違いする。
罠4 サンプルプログラム(見たままの機能の場合説明されない)
ハマった原因。サンプルプログラムを環境に合わせて変更し、一見動作している ように見えるが、どう動いたら正解なのかわからないのが問題。いや、サンプル プログラムは確実に動かないと問題なのだ。Serialからのデータ入力は、画面に 映っているがなにをハードスクロールしているか不明であった。
さんぷるプログラム
最近確認用のプログラムが長くなってきたのでこっちに移動
https://github.com/chiyo-h/Arduino/blob/master/M5Core2/TFT_Terminal/TFT_Terminal.ino
プログラムをUPLOADしたあと、PC端末側から、Serial通信でデータを送るとそのまま、M5Core2の液晶に文字が表示される。初期表示が、最下位行になっており、改行する毎に上側にハードウェアスクロールしていく。このプログラムのいいところは、表示スピード重視していて改行コード連打が最速になるようになっているっぽい。実際は、バグっているが。 もとは、TFT_eSPIライブラリ開発者のBodmerさんのサンプルプログラムこれをM5Core2用に変更と解析を行っていったもの うざいくらい説明書きをしてあるので内容は理解できると思う。というか、ハマりまくったので1行毎に動作確認が大変。 なんというか、最適化は、コンパイラに任せたらいいよ。みたいな、Pythonのシンプルさがありがたく感じるほかの方のプログラム解析
遊び機能
rot = 0;
を変更すると縦横、変更される。0がdefaultで動かなかったモード。これはこれで、LOG表示としてはいいかも。- BOTTOMに、パラメータ設定を追加
- スクロールが分かりやすいようにXラインを追加
- FONT_HEIGHT/BOT_FIXED_AREA/TOP_FIXED_AREAを変更して機能確認ができる。
_
キーでSCROLL機能ON/OFF\\
,/
キーで強制ロール機能
副産物
M5.Lcd.setRotation(rot) 仕様 0~4が回転、5~7が鏡文字(液晶をそのまま表示するのではなく、鏡越しに表示したり、反射させて表示させるときのモード。)
まとめ
Vertical Scrolling機能は、使えるので上手くプログラムに組み込むと便利。SCROLL機能ON/OFFを使ってもらえればわかるように実際のFRAME RAMは、何ら書き換えは行われていない。 LSIの中でView位置を変更しているだけなのである。
わかってしまえば、VSPの値を変更しつつ普通に表示しているだけなのである。
なんか、脱線しまくって。こんなことしている。実は、まだまだ脱線しているのだが次回に続く