ESP32-C3 Super mini と 0.96″ 80X160(RGB)ISPの組み合わせでAdafruit_ST7735.hを使うと色の指定がおかしくて今までは力業で現実に合うように色を修正していましたが、脳内で変換するのも限界があるということでかなり時間をかけて原因を知りやっと解決した。
白と黒が反転、色まで変わってしまう(白黒赤青緑→黒白シアン黄マゼンダ)になる謎の仕様だったが色の反転(正しくは補色の関係らしい)以外に実はへっぽこプログラマがフルカラーから64万色に変更するときのBGRをRGBにしてしまった事も色の指定間違いに長いこと気が付けず混乱に拍車をかけていた。
下記の切り抜きは前回のソースコードであるが赤のアンダーライン部分のカラー指定はインジケータ10個目の点灯パターンなので赤になります。コード指定はRGBではなくBGRなのでcolor565(0,0,255)となる必要があるが、そうすると正しく色が出ないため、無理矢理color565(0,222,255)にして赤を出している。実際のコードでいうと赤と緑の指定なので本来は黄に近い色になる。

インターネットの海を航海して分かったことだが、沢山の人がこの問題を棚上げにし、ハードウェアの問題で済ましてその後、放置している人が本当に多かったことか。また、強引にAdafruit_ST7735.cppライブラリを修正している人もいて直接の原因の到達するまでに相当の時間を要した。
過去にM5Stack Fireでも問題が出たことがあり、まさか原因そのものが液晶にあるとは気がつけなかった人も多かったようです。(これらは5年程前に海外の方の対応で終息しています)
当方が気付いたきっかけはIPS液晶の販売コーナーに色反転コマンド(INVON:0x21)を追加で実施する必要がありますとのコメントを中国語で見つけた。古い中華サイトなので聞くこともできず、その後、TFT_eSPIモジュールにTFT_INVERSION_ONなどの定義があり、これらはなんぞや?
とたまたま調べた事から判明しました。
結論から言うとIPS液晶を使う時は色反転コマンドをいれるのが基本らしい。
今回も定義に入れることでやっと正しい配色になりました。インジケータ部の色が出ない部分は薄らとした灰色でしたが、以前のソースコードでは反転しており汚い白色でした。また、前に開示したソースコードのYPVSロゴも実際は黒ドットになっており、白表示にするには反転データにして入れ換えなければなりません。ソースを読むことができる人からしたら、なんだ、この色指定は?となると思います。
問題が解決しましたので細々とした色情報をなどを変更し、基板を作って終わりにします。長い旅路の出口がやっと見えました。ロゴに関しては以前と同じように白にした方が良いのか白枠に黒を入れた方が良いのか見栄えの問題で悩んでいて、この表示に関してはテストユーザのフロントソーサさんに聞くことにします。→白枠にして黒のロゴに変更の意見が出たのでおおせのままに。
インジケータの描画スピードも問題無いようです。電圧の範囲を0.2V-1.2Vに変更してせわしなく机上テストしてる動画。(テスト時、YPVSロゴの塗りつぶし範囲を間違えて上部が欠けているのはご愛敬)
やっと心置きなく、タコメータソースに戻れるぞ。こちらも早めに収束させます。
プロトタイプの基板が出来たら、正しいソースコードはまた開示します
コメント