ILI9341のスクロール機能

fig161103a2ILI9341には,画面をスクロールさせる機能がある。VerticalScrollDifinition(33h)コマンドで、上下の非スクロールエリアの幅を設定(リセット時は0)。VerticalScrollStartAddress(37h)コマンドでスタート位置を設定すれば、Vertical Scroll Areaの表示を自由にスクロール(回転?)表示できる。

このことは以前から知っていたので、いずれHublisoft_ILI9341ライブラリでサポートし、HSES-LCD24で使おうと考えていた。今、HSES-LCDのデモ用にRss表示プログラムを作成している。RSSの表示に、このスクロール機能を使って、大きな文字で下図のような表示をするべく作業していた。

fig161103a1

ところが、いろいろ試していくうち、そんな変な表示をするより、普通にテキストの改行時にスクロールさせた方が、見栄えも良いし、汎用性もあることに気が付いた。

fig161103a3
というわけで、Humblesoft_ILI9341ライブラリにVerticalScrollArea機能を実装、公開した。

使い方を説明する。Humblesoft_ILI9341クラスにpublicなメンバーとしてtfa,vsa,bfaを追加した。これらは、それぞれ Top Fixed Area, Vertical Scroll Area, Bottom Fixed Area  に対応するAdafruit_GFXクラスのサブクラスで、Humblesoft_ILI9341クラス同様に描画できる。fontxの設定を行えば、漢字の描画も可能。

それぞれの領域の高さはsetVerticalScrollAreaメソッドで行う。設定しなければ全領域がvsaとなる。print/println/printfメソッドで文字描画後、カーソル位置が下限を超えた場合、vsa領域のみスクロールされる。

サンプルプログラムは、Humblesoft_ILI9341/vsaSample.inoにある。

#include "Adafruit_GFX.h"
#include "Adafruit_ILI9341.h"
#include "Fontx.h"
#include "FontxGfx.h"
#include "Humblesoft_ILI9341.h"

IMPORT_BIN("fontx/ILGH16XB.FNT", font_h);
IMPORT_BIN("fontx/ILGZ16XB.FNT", font_z);
extern uint8_t font_h[], font_z[];

Humblesoft_ILI9341 tft = Humblesoft_ILI9341();

void setup()
{
  Serial.begin(115200);
  delay(100);
  Serial.println("\n\nReset:");
  
  tft.begin();
  tft.setVerticalScrollArea(20,20);

  tft.tfa.fillScreen(ILI9341_RED);
  tft.vsa.fillScreen(ILI9341_BLACK);
  tft.bfa.fillScreen(ILI9341_BLUE);
  tft.tfa.setTextSize(2);
  tft.tfa.print("TFA");
  tft.vsa.setTextColor(ILI9341_WHITE);
  tft.vsa.setFontx(font_h, font_z);
  tft.vsa.print("VSA - Vertical Scroll Area\n");
  tft.bfa.print("BFA");
}

void loop()
{
  static int i=1;
  tft.vsa.printf("%d行目\n",i++);
  delay(1000);
}

使用上の注意がいくつかある。このスクロール機能は、setRotation(0)の時しか、まともに動かない。tftに対する描画はスクロールのことを考慮していないので、 vsaでスクロールが発生した後は、変になるはず。getTextBoundsの処理がちょっと間違っている気がする。

あと、従来 Humblesoft_ILI9341に入っていたfontx関連機能をFontxとFontxGfxライブラリに分離したので、これらのライブラリもインクルードしてやる必要がある。 これは、作業を進めるうち、いろんなクラスにFontx描画機能を組み込まなければいけなくなり、そのたびに同じ処理が重複するのがいやになり、Adafruit_GFXを継承したクラスに対するFontx描画機能のHelperクラスとしてFontxGfxクラスを作成、Adafruit_GFX非依存部分をFontxクラスとして作成した。

Comment

  1. よこしまはらくろ より:

    大垣にてHSES-LCD24を購入させていただいたものです。
    初歩的な質問で大変恐縮なのですが、
    FontxとFontxGfxの入手方法(設定方法)をご教示いただきたく…
    他の記事に既に公開されておりましたら下名の見落としで申し訳ございません。
    お手数ですが、よろしくお願いいたします。

  2. nari より:

    済みません、
    以下に説明を追加しました。
    https://github.com/h-nari/Humblesoft_ILI9341/blob/master/README.md

    私のgithub https://github.com/h-nari?tab=repositories からgit cloneかzipファイルでダウンロードしてご使用ください。 zip形式のライブラリのインストール方法は、 http://www.humblesoft.com/wiki/?Arduino%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB をご覧ください。

    • よこしまはらくろ より:

      ご教示ありがとうございます。

      早速サンプルプログラムを実行することができました。
      下命がhumblesoft様のWikiを最初に確認すれば問題なかったようですね。
      これで色々と弄ることが出来そうです。

      お手数をおかけいたしました。

nari へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。