前回より練習台をラズパイPico2機からWio Terminalに変更。LCD画面表示用の関数どもの練習のためです。今回はディスプレイ設定のキホン的なところを確認。とりあえず前回同様のLCDへの文字列の出力を使って設定を確認してみました。しかしデフォルトの文字サイズでは老眼の目には見えんぞなもし。
※Lispと一緒 投稿順 index はこちら
※実機確認は Wio Terminal で行ってます。
※使用させていただいとります uLisp のバージョンは 4.6b (Arm用)です。
Graphics extensions
前回、uLisp4.6b の再ビルドを行いましたが、グラフィクス機能はオプションの扱い(といってコメントアウトを1か所外すだけでビルドできますが)です。御本家マニュアルページでは以下に解説があります。
上記を読めばわかる話ですが、お惚け老人が理解したところをかいつまんだものが以下に。
標準登載されている文字セットは、IBM PCのコードページ437(PC-DOS使っていた人には多分お馴染みさん)に準拠している。サイズは横5 縦7(チイセーです。老人には辛いよ。)、デフォルト色は黒字に白色。なお Wio Terminalは320×240ドット(QVGAて言っていたサイズ。)
色指定はハード的には16ビット整数、MSB側からR5,G6,B5。黒が0で白が65535。しかし、上記のマニュアルページで定義されている rgb 関数を定義すると R G Bの各数値から設定できるのでお楽。
(defun rgb (r g b) (logior (ash (logand r #xf8) 8) (ash (logand g #xfc) 3) (ash b -3)))
ただし、上記関数はRGB各色について、0~255の数値で受け取り、それぞれの上位ビットを設定してくれる(256で正規化的な。)
今回設定確認に利用した関数
前回、(with-gfx (str) … でuLispからの文字出力先をLCDに向けることをやったので、今回もその方法をチョイ変で画面出力する関数が以下に。
(defun testprint (rt x y pstr c) (set-rotation rt) (fill-screen) (set-text-size 2) (with-gfx (str) (set-cursor x y) (set-text-color c) (princ pstr str)))
老眼の老人用に文字サイズは2倍に固定っす。
まずは画面のローテーション確認
LCD画面は4通りの「ローテーション」を設定できます。上記のテスト関数で4通り全てをやってみるシーケンスが以下に。文字色は白なのよ。
(testprint 0 0 0 "set-rotation 0" (rgb 255 255 255)) (testprint 1 0 0 "set-rotation 1" (rgb 255 255 255)) (testprint 2 0 0 "set-rotation 2" (rgb 255 255 255)) (testprint 3 0 0 "set-rotation 3" (rgb 255 255 255))
ローテーションは、「3」にしておくのがWio Terminalのスタイル的にはフツー。でも回転も簡単。
画面の反転
また、画面の反転も簡単、invert-display関数に真(t) を与えるか偽(nil)を与えるかで制御できます。(invert-display t)した結果が以下に。
背景色の設定(クリア)
デフォルトの背景色は黒(0)ですが、色の設定も簡単。RGBのGにだけ最大値をたててみるのが以下です。
(fill-screen (rgb 0 255 0))
文字表示のラップアラウンド
テキスト出力を画面上でラップさせるか否かのスイッチもあり。以下でラップ。
(set-text-wrap t)
ラップさせたくなければ以下で。
(set-text-wrap nil)
上記の左がラップ、右がラップせずです。なお、両方とも文字サイズは2倍なので、デフォルトの1倍サイズであればこの2倍の文字幅が表示できる筈。老眼老人は知らんけど。