TFT LCD(ST7735)モジュールに表示を行う

〔Arduinoの動かせ方入門に戻る〕


秋月通商で”1.8インチ 18bitカラーTFTシールド with microSD & ジョイスティック”を買った、
(2020/03現在、秋月では販売されていない、スイッチサイエンスこちらに新バージョンがある様です。)
この商品は、Adafruitの物らしくライブラリが有るらしいのですぐ動くだろうと思い購入した。
2019/5月現在、Adafruitではこの商品は無く"V2"となっているらしい。
解像度は128x160です、でぇ、LCDを制御しているチップは"ST7735R"でSPIで制御するみたいです。

"V1"のジョイスティックはアナログピンに接続されていますが、"V2"のボタンとジョイスティックは
I2Cで読み取る様です。(アナログピン読み取り方式が良い様に思えるのだがぁ....)
モジュール配置もジョイスティック/SD/TFT LCD共に180°(左右)反対配置です。

ST7735Rチップ仕様やモジュール仕様・回路図等のダウンロードはこちらを参照下さい。
TFT LCD のマニュアルは、こちらも参照下さい。

《ライブラリのインストール》

ライブラリのインストール方法は色々有るみたいでぇ、何だかぁバージョンも色々らしいなのでぇ、
私の行った方法はArduino IDEからインストールして行った方法で、必要なライブラリは以下、
"Adafruit_GFX_Library"と"Adafruit_ST7735_and_ST7789_Library"の2つです。

でぇ、私はArduino IDE(V 1.8.1)でインストールしました。
IDEのメニューバーの[スケッチ]→[ライブラリをインクルード]→[ライブラリを管理...]を順にクリック、
「ライブラリマネージャ」画面が表示されるのでそこの検索窓に"GFX"と"ST7735"を入力します。

ライブラリマネージャ画面1
"GFX"で検索し、表示された"Adafruit GFX Library by Adafruit"を[インストール]します。

ライブラリマネージャ画面2
次に"ST7735"で検索し、
表示された"Adafruit ST7735 and ST7789 Library by Adafruit"を[インストール]します。

このライブラリの解析をこちらのStupiddogさんが行われているので参考にしましょう。

《動作確認》

早速動作確認を行った。
IDEのメニューバーの[ファイル]→[スケッチ例]→[Adafruit ST7735 and ST7789 Library]→
[graphicstest]を順にクリックし表示されたスケッチを
tft.initR(INITR_BLACKTAB);
から
tft.initR(INITR_GREENTAB); // LCDに貼ってあるタブシールで初期化が変わるみたい、私のは"緑"
でコンパイルし動作させた。
が、表示が少しずれている様なので、
"Adafruit_ST7735_and_ST7789_Library"内の "Adafruit_ST7735.cpp"ファイルの 219/220行目の
"initR()"関数内の
 _colstart = 2;
 _rowstart = 1;

 _colstart = 0;
 _rowstart = 0;
にしたら治った、他のLCDを0,0で動作させるとズレるかもね。

だがぁ、コンパイル結果が"57%"チョイデカい、それにぃ、このライブラリは色々なArduino(ESPも)又
色々なチップ等に対応しているのでスケッチが読みにくい....
ライブラリを作る事にした、なので以下の記事は自前のライブラリで記述します。

《1.8インチ 18bitカラーTFTシールド with microSD & ジョイスティック V1》

ArduinoPIN
LCDピン
機     能
D4
SD_CS
SDカードの選択ピン
D8
TFT_DC
送信するデータは、コマンドかパラメータかの指定ピン
D10
TFT_CS
LCDの選択ピン
D11
MOSI
LCD(SD)にデータを送るピン
D12
MISO
SDからデータを受け取るピン
D13
SCK
SPIクロックを出力するピン

RST
Arduinoのリセットピンと繋がっている
A3

ジョイスティック用ピン
電源はArduinoの5.0Vを使っている、3.3Vは使わずモジュール内のレギュレータで3.3Vを作り出している
I/O電源は3.3Vでレベルシフターを使っている。

ジョイスティックだがぁ、各方向はスイッチになっている、各々抵抗が付いていて分圧されているので
それの抵抗値をアナログで読み取り方向を決めるやり方です。
だがぁ、少々ちゃちいです、直ぐキャップは外れるわぁ入力しにくいわぁ...おまけぇですか?
ゲーム入力にしたかったのにぃ。

《1.8インチTFT液晶ディスプレイモジュールST7735S》

1.8インチTFT液晶ディスプレイモジュールST7735S  このモジュールは、ヤッホーオークションで手に入れた、
 ST7735RとST7735Sの違いが解らないのだが、
 緑色タブシールが貼ってある、上のモジュールと同じ色です。

 モジュールには、"1.8TFT SPI 128*160 V1,1"と書いて有る。
 VDDピンのそばに電源レギュレータが有るのでぇ、5Vで良いのかなぁ、
 少し調べた、
 こちらのサイトに配線図、使い方、回路図等がある、参照されたし。
 但し、"A0"の配線は"D8"に配線換えしています。(シールドに合わせました)
 でぇ、LCD側のみ配線し"Basic.ino"を動作させたらそのまま変更なしで動いた。

 このモジュールを使った詳しい実験は[PIC編]にて行っています。

ArduinoPIN
LCDピン
機     能

LED
バックライト、電源は3.3V、PWMで明るさを変えられるみたい
GNDに接続するとバックライトOFFです。
D13
SCK
SPIクロックを出力するピン
D11
SDA
LCDにデータを送るピン
D8
A0
送信するデータは、コマンドかパラメータかの指定ピン

REST
ハードリセット、LOWでリセットが掛かる
D10
CS
LCDの選択ピン

GND
電源および信号グランドピン

VCC
5VDCに接続する電源ピン(内蔵レギュレータで3.3Vにしている)
(3.3Vで使用する場合は裏の"J1"を半田盛りするらしい、未実験)
このモジュールの、LCD側はSPIのデータを送るピンはありません。(チップ自体は有る様です)

SDカードと接続するピン、LCD側とは接続されていない。
ArduinoPIN
LCDピン
機     能
D4
SD_CS
SDの選択ピン
D11
SD_MOSI
SDにデータを送るピン
D12
SD_MISO
SDからデータを受け取るピン
D13
SD_SCK
SPIクロックを出力するピン

紫色ピンは変更可能です、
但し"D10"を変更した場合はD10ピンは使わない時でも出力状態のままにしておく必要があるらしい。
私のだけか? SDカードを挿すとぉノイズが酷過ぎでLCD画面がゆれました。

《ダウンロードスケッチについて》

ここでは、Arduino IDE 1.8.1 Ardino UNOでの実験となっています。
↓ここからグラフィックLCDに表示するArduino用スケッチファイルをダウンロードして下さい。
skST7735x.zip

ダウンロードファイルを解凍すると下記の様なファイル構成です。
[skST7735x]─┬─[examples]──────┬─[Basic]----- Basic.ino
       ├ skST7735x.cpp     ├ [Image]----- Image.ino
       ├ skST7735x.h      ├ [ImageK]---- ImageK.ino
       ├ skST7735x_10key.cpp  └ [num10key]-- num10key.ino
       ├ skST7735x_10key.h
       ├ skST7735x_img.cpp
       ├ skST7735x_img.h
       ├ font.h
       ├ keywords.txt
       ├ Shinome.pdb
       ├ ebine.bmp
       └ kumamon.bmp
インストール方法は、Arduinno IDE 1.8.1 で説明、
メニューバーの[スケッチ]→[ライブラリをインクルード]→[.ZIP型式のライブラリをインストール...]を
順番にクリックし、ダウンロードしたファイル"skST7735x.zip"を指定します。

ファイルの説明

このライブラリで動作させているモジュールは、
・ST7735Rチップで、128x160 1.8インチ 18bitカラー スクリーン (GREEN TAB シール)
・1.8インチTFT液晶ディスプレイモジュールST7735S(GREEN TAB シール)

skST7735x.cpp・・・・・・・・・ ST7735チップのTFT-LCD用関数ライブラリ(基本ライブラリ)
skST7735x.h・・・・・・・・・・・ ST7735チップのTFT-LCD用関数ライブラリのヘッダファイル
skST7735x_10key.cpp・・ ST7735チップのTFT-LCD用関数ライブラリ(10キー入力編)
skST7735x_10key.h・・・・ ST7735チップのTFT-LCD用関数ライブラリのヘッダファイル
skST7735x_img.cpp・・・・ ST7735チップのTFT-LCD用関数ライブラリ(イメージデータ出力編)
skST7735x_img.h・・・・・・ ST7735チップのTFT-LCD用関数ライブラリのヘッダファイル
font.h・・・・・・・・・・・・・・・・・・ キャラクタ文字(5x8)フォントファイル
             (以前、こちらで使用したファイルを使用しています)

// 以下はSDカードに入れて使用します、コンパイルには使いません。
Shinome.pdb・・・・・・・・・・・12x12漢字フォントファイル(実際のファイル名は"Shinonome_12.pdb")
            ("CJKOS Japanese Fonts"サイトの"東雲"をそのまま利用しています)
ebine.bmp・・・・・・・・・・・・・ 160x107 24bit ビットマップファイルのサンプル
kumamon.bmp・・・・・・・・・ 87x95 24bit ビットマップファイルのサンプル

Basic.ino

Basic実行画像  "skST7735x.cpp"ファイルを使用した、
 skST7735x基本ライブラリの描画サンプルスケッチです。
 メニューバーの[ファイル]→[スケッチ例]→
 [skST7735x]→[Basic]を順番にクリックします。

 室内で撮ったのであまり写りが良くないですね。
 PIC編時は何とかもう少ししましょうかね。


Image.ino

Image実行画像  "skST7735x_img.cpp"ファイルを使用した、
 ビットマップ(BMP)ファイルの描画サンプルスケッチです。
 メニューバーの[ファイル]→[スケッチ例]→
 [skST7735x]→[Image]を順番にクリックします。

 SDカードに"ebine.bmp"ファイルを準備します。
 SDカードが付いていない人は、スイッチサイエンスの
 こちらこちらを買いましょう。

このファイルは写真から160x107ビットに縮小し、BMP型式の24ビットファイルで保存した物です。
画像は、128x160以内で Windows BMP型式の24ビットファイルで作成しましょう。
画像の表示は左下から右上に表示します、これはBMPファイルがその様に記録されている為です。

ImageK.ino

ImageK実行画像  "skST7735x_img.cpp"ファイルを使用した、
 ビットマップ(BMP)ファイルと漢字文字の描画サンプル
 スケッチです。
 メニューバーの[ファイル]→[スケッチ例]→
 [skST7735x]→[ImageK]を順番にクリックします。

 SDカードに"kumamon.bmp"/"Shinome.pdb"ファイル
 を準備します。

これはくまモンのイラストを見ながら"EDGE"ドット絵エディターで作成した物です。
作成した物は256色なのでBMPで保存した後、"GIMP"を使い24ビットで保存し直しています。

num10key.ino

num10key実行画像  "skST7735x_10key.cpp"ファイルを使用した、
 10キーデータの入力を行うサンプルスケッチです。
 メニューバーの[ファイル]→[スケッチ例]→
 [skST7735x]→[num10key]を順番にクリックします。

 ジョイスティックを使います、付いていない人は
 秋月通商のこちら辺りを買い作りましょう。
 赤文字は見にくいなぁ、PIC編は色を変えよう。

操作は、ジョイスティックを動かし中央ボタンを押すとその場所の文字が入力されます。
[C]で入力をクリア [B]でバックスペース [←]でENTERキーです。
ENTERキーを押すと入力文字が返され10キーツールは消えます。

skST7735x.h

ST7735チップのTFT-LCD用関数基本ライブラリのヘッダファイルです。

ST7735Rチップ用の定義とSPI接続ピン情報の定義にジョイスティック情報の定義が記述されています、
変更及び追記を行う場合はこのファイルに行いましょう。
#define TFT_DC      8  // SPIデータのパラメータ又はコマンド選択ピン
#define TFT_CS     10  // TFT_LCDモジュール選択ピン
は使用するピンに応じて変更しましょう。


skST7735x.cpp

まず利用する場合は下記行をスケッチの最初に記述します。
#include <skST7735x.h>

基本ライブラリの使い方を説明します。

skST7735x
 TFT-LCD用関数基本ライブラリを使用する為に必要な宣言(初期化)を行います。
 skST7735x LCD = skST7735x(CHIP_ST7735X | DISPLAY_TYPE_1) ;
  引数には使用するLCDモジュールの情報を指定します
  現在は、"CHIP_ST7735X | DISPLAY_TYPE_1"のみしか用意されていません。
  "LCD"の名前は任意に変更可能です。

 以下はこの宣言例で記述します。

LCD.begin(uint8_t value)
 ディスプレイモジュールの初期化を行う処理です。
  value : 画面の消去色指定 0 = 黒 1 = 白

 例)LCD.begin(BLACK_SCREEN) ;

LCD.DisplayDirection(uint8_t value)
 ディスプレイの表示方向を指定する処理です。
  value : 表示方向を指定(1-4)
      1 = フレキシブルケーブル側が上方向で、原点は左上が0.0(初期状態)
      2 = フレキシブルケーブル側が下方向で、原点は左上が0.0
      3 = フレキシブルケーブル側が右方向で、原点は左上が0.0
      4 = フレキシブルケーブル側が左方向で、原点は左上が0.0

LCD.CLS(uint8_t value)
 ディスプレイの表示をクリアする処理です。
 この処理は、白か黒でのみ塗りつぶします、色を付けたい場合はFillBox()を使用。
  value : 0 = 黒(BLACK_SCREEN) 1 = 白(WHITE_SCREEN)

LCD.ColorSet(uint8_t red, uint8_t green, uint8_t blue)
 色の設定を行う処理です。
 この処理は、指定されたRGBをST7735用の色構造に変換します、
 尚、12/16/18ビットカラーのみ対応しています、その他は黒に設定されます。
 12bit(R:4 G:4 B:4) 16bit(R:5 G:6 B:5) 18bit(R:6 G:6 B:6)
 なので、初期化で設定されているカラーにより指定する上限値は変わります。
  red  : RGBで指定の赤
  green : RGBで指定の緑
  blue : RGBで指定の青

 例)18ビットカラー設定で紫色指定の場合
   LCD.ColorSet(63,0,63) ;

LCD.ReduceColorSet(uint8_t red, uint8_t green, uint8_t blue)
 RGB値(24ビット色から)の減色を行い色を設定する処理です。
 この処理は24bit(R:8 G:8 B:8)のフルカラー値から、初期化で設定されているカラーに減色し
 その値を設定する処理です。
 又、16bit色は、R(5):G(6):B(5)ビットですがG(5)にして統一します。

  red  : RGB(24ビット)で指定の赤
  green : RGB(24ビット)で指定の緑
  blue : RGB(24ビット)で指定の青

 例)12ビットカラー設定で紫色指定の場合
   LCD.ReduceColorSet(255,0,255) ;
   は、LCD.ColorSet(15,0,15) ; と同じです。

LCD.PutPixel(uint16_t xp, uint16_t yp)
 1ドット点を描画する処理です。
 モジュールにより描画範囲が異なります、ここで使用した物は128x160スクリーンです。
 他のスクリーン時は、DisplayInit()関数に追記して下さい。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置

LCD.Circle(uint16_t xp, uint16_t yp, uint16_t radius)
 指定の円を描画する処理です。
  xp   : ディスプレイ座標の列(横)位置
  yp   : ディスプレイ座標の行(縦)位置
  radius : xp/ypを中心として、そこからの半径を指定します

LCD.FillCircle(uint16_t xp, uint16_t yp, uint16_t radius)
 指定の円エリアを指定色で塗りつぶす処理です。
 指定色とは、ColorSet()/ReduceColorSet()で行います。
  xp   : ディスプレイ座標の列(横)位置
  yp   : ディスプレイ座標の行(縦)位置
  radius : xp/ypを中心として、そこからの半径を指定します

LCD.Line(uint16_t xsp, uint16_t ysp, uint16_t xep, uint16_t yep)
 指定の線を描画する処理です。
 xsp/yspを開始点として、xep/yepを終了点とする対角線上に線を描きます。
  xsp : ディスプレイ座標の開始する列(横)位置
  ysp : ディスプレイ座標の開始する行(縦)位置
  xep : ディスプレイ座標の終了する列(横)位置
  yep : ディスプレイ座標の終了する行(縦)位置

LCD.Box(uint16_t xsp, uint16_t ysp, uint16_t xep, uint16_t yep)
 指定の四角形を描画する処理です。
 xsp/yspを開始の頂点として、xep/yepを終了の頂点とした四角形を描きます。
  xsp : ディスプレイ座標の開始する列(横)位置
  ysp : ディスプレイ座標の開始する行(縦)位置
  xep : ディスプレイ座標の終了する列(横)位置
  yep : ディスプレイ座標の終了する行(縦)位置

LCD.FillBox(uint16_t xsp, uint16_t ysp, uint16_t xep, uint16_t yep)
 指定の四角形エリアを指定色で塗りつぶす処理です。
 指定色とは、ColorSet()/ReduceColorSet()で行います。
 xsp/yspを開始の頂点として、xep/yepを終了の頂点とした四角形を塗りつぶします。
  xsp : ディスプレイ座標の開始する列(横)位置
  ysp : ディスプレイ座標の開始する行(縦)位置
  xep : ディスプレイ座標の終了する列(横)位置
  yep : ディスプレイ座標の終了する行(縦)位置

LCD.Putc(uint16_t xp, uint16_t yp, uint8_t c)
 指定された位置に1文字(5x8)描画させる処理です。
 実際の文字太さは5x7ドットで、8ドット目はスペースです。
 使うフォントは"font.h"で、0x80〜0x9Fに文字を登録可能です。
 因みに、"↑↓ΩπΣ千万円÷■〒℃±"を登録しています。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  c : 表示する1文字を指定します

LCD.Puts(uint16_t xp, uint16_t yp, uint8_t *s)
 指定された位置に文字列(5x8)を描画させる処理です。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  *s : 表示する文字列を指定します(文字列の最後はnullでなければなりません)

 例)0,0の位置に"108円"と18ビットカラー設定で赤色で表示する場合
     LCD.ColorSet(63,0,0) ;
     LCD.Puts(0,0,"100") ;
     LCD.Putc(18,0,0x87) ;
 又は
     char s[] = {'1','0','8',0x87,0x00} ;
     LCD.ColorSet(63,0,0) ;
     LCD.Puts(0,0,s) ;

LCD.Putc2x(uint16_t xp, uint16_t yp, uint8_t c)
 指定された位置に2倍の1文字(5x8x2)描画させる処理です。
 "font.h"を単純に2倍表示させているだけです。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  c : 表示する1文字を指定します

LCD.Puts2x(uint16_t xp, uint16_t yp, uint8_t *s)
 指定された位置に2倍の文字列(5x8x2)を描画させる処理です。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  *s : 表示する文字列を指定します(文字列の最後はnullでなければなりません)

LCD.SleepCtl(uint8_t sel)
 スリープのON/OFFを行う処理です。
 復帰すればその前までの画面が表示されます、
 スリープ時に画面表示をOFFだがぁバックライトは消えない、やり方がわからない。
 (他のモジュールは、バックライト制御ピン(LED)が有るので出来るかもぉ)
  sel : 0 = スリープからの復帰 1 = スリープモードにする

LCD.DisplayINV(uint8_t sel)
 ディスプレイの反転表示を切り替える処理です。
 この処理を行った時点でフレームメモリ全体(画面全体)ビットが反転して表示されます、
 即ち色が白だった場合は黒で表示します。
  sel : 0 = 反転表示OFF 1 = 反転表示ON

skST7735x_img.h

ST7735チップのTFT-LCD用関数イメージデータ出力ライブラリのヘッダファイルです。

skST7735x_img.cpp

このライブラリは、SDカードを使います。
まず利用する場合は下記行をスケッチの最初に記述します。
#include <skST7735x_img.h>

イメージデータ出力ライブラリの使い方を説明します。

skST7735x_img
 TFT-LCD用関数イメージデータ出力ライブラリを使用する為に必要な宣言(初期化)を行います。
 skST7735x_img IMG = skST7735x_img(CHIP_ST7735X | DISPLAY_TYPE_1) ;
  引数には使用するLCDモジュールの情報を指定します
  現在は、"CHIP_ST7735X | DISPLAY_TYPE_1"のみしか用意されていません。
  "IMG"の名前は任意に変更可能です。

 以下はこの宣言例で記述します。

ans = IMG.imgInit(uint8_t cs)
 イメージ出力関連(SPI)の初期化を行う処理です。
 これを呼び出す前にIMG.begin()を呼び出す必要が有ります。
  cs : SDカードを選択するCSピンを指定する
  ans : 0 = 成功 1 = 失敗(又はSDが入っていない)

 例)IMG.begin(BLACK_SCREEN) ;
   IMG.imgInit(4) ;

ans = IMG.PutImage(uint16_t xp, uint16_t yp, uint8_t *filename)
 BMP画像を表示させる処理です。
 Windowsの24ビットカラーのみ対応で、表示可能なスクリーンサイズ内で作成します。
  xp    : ディスプレイ座標の列(横)開始位置
  yp    : ディスプレイ座標の行(縦)開始位置
  *filename : BMPのファイル名(半角大文字 xxxxxxxx.BMP)
  ans    : 0 = 正常終了
        1 = ファイルオープンエラー(ファイルが存在しないかも)
        2 = BMPファイルでない又は、24ビットカラーでない

 例)ans = IMG.PutImage(0,0,"EBINE.BMP") ;

ans = IMG.PutcK(uint16_t xp, uint16_t yp, uint16_t c)
 指定された位置に漢字1文字(12x12)描画させる処理です。
 SDカードからフォントデータ(SHINOME.PDB)を読み出して表示させます。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  c  : 漢字コード(JISコード)を指定する、'熊'なら0x3727
  ans : 0 = 正常終了
     1 = ファイルオープンエラー(ファイルが存在しないかも)

※ 漢字のJISコードを調べるには、KGK紀州技研さんのこちらをお使いください。

JISコードを調べるサイト
"漢字(日本)→JISコード"にチェック入れ、
変換元に文字列を入力後、[変換>]をクリックします。

ans = IMG.PutsK(uint16_t xp, uint16_t yp, uint8_t *s)
 指定された位置に漢字文字列(12x12)を描画させる処理です。
  xp : ディスプレイ座標の列(横)位置
  yp : ディスプレイ座標の行(縦)位置
  *s : 表示する文字列を指定します(文字列の最後はnullでなければなりません)
  ans : 0 = 正常終了
     1 = ファイルオープンエラー(ファイルが存在しないかも)

 例)0,0の位置に"くまモン"と18ビットカラー設定で赤色で表示する場合
     char s[] = {0x242F,0x245E,0x2562,0x2573,0x00} ;

     IMG.ColorSet(63,0,0) ;
     IMG.PutsK(0,0,s) ;

skST7735x_10key.h

ST7735チップのTFT-LCD用関数10キー入力ライブラリのヘッダファイルです。

色を変更したい場合は、下記記述を変更しましょう。
#define NUM_KEY_BACK_COLOR ColorSet(0,0,0)    // 背景の色は黒(18bit color)
#define NUM_KEY_FRAME_COLOR ColorSet(63,63,63)  // 枠線の色は白(18bit color)
#define NUM_KEY_MOJI_COLOR ColorSet(63,0,0)   // 文字の色は赤(18bit color)

skST7735x_10key.cpp

このライブラリは、ジョイスティックを使います。
まず利用する場合は下記行をスケッチの最初に記述します。
#include <skST7735x_10key.h>

10キー入力ライブラリの使い方を説明します。

skST7735x_10key
 TFT-LCD用関数10キー入力ライブラリを使用する為に必要な宣言(初期化)を行います。
 skST7735x_10key INP = skST7735x_10key(CHIP_ST7735X | DISPLAY_TYPE_1) ;
  引数には使用するLCDモジュールの情報を指定します
  現在は、"CHIP_ST7735X | DISPLAY_TYPE_1"のみしか用意されていません。
  "INP"の名前は任意に変更可能です。

 以下はこの宣言例で記述します。

 この機能を使う場合は、INP.begin(BLACK_SCREEN) ;で初期化を行ってから使用します。

INP.num10KeyON(uint8_t xp, uint8_t yp)
 10キー入力ツールの初期化を行いツールを表示させる処理です。
  xp : 表示させるディスプレイ座標の列(横)開始位置
  yp : 表示させるディスプレイ座標の行(縦)開始位置

 例)INP.begin(BLACK_SCREEN) ;
   INP.num10KeyON(20,10) ;

ans = INP.num10KeyIn(uint8_t len,uint8_t *sbuf)
 10キー値を読み込む処理です。
 この処理は、"numKeyON()"が実行されていなければ処理されません。
 又、この処理は、ENTER(←)キーが押されるまでは繰り返し実行させていなければなりません。
 尚、この関数に"delay(150)"が記述されています、これはジョイスティックの入力状態を調整するもの
 です、入力状態の速度に応じて調整しましょう。
  len  : 入力するデータの長さ( '.' や '-' の長さも考慮する)
  *sbuf : 入力するデータを格納するバッファのポインタをセットする
  ans  : 1 = 入力完了(ENTERキーが押された) 0 = まだ入力中

 ※ ENTERキーが押された場合は、ツールは終了(消える)しバッファに値を設定 (注:最後にNULLを
   追加する)します。なのでぇ、ENTERキーを押すまではツールは実行されたままです。
   尚、再度入力を行う場合は、"numKeyON()を実行させれば良いでしょう。

 例)5文字の入力を行う場合
 uint8_t MojiBuf[8] ;

 void loop()
 {
     int ans ;

     ans = INP.num10KeyIn(5,MojiBuf) ;
     if (ans == 1) {
          Serial.println(MojiBuf) ;
     }
 }
ans = INP.ReadJoystick()
 ジョイスティックからキー値を読み込む処理です。
 この関数は、”1.8インチ 18bitカラーTFTシールド with microSD & ジョイスティック”の為に
 作ってあります。
 この関数は、モジュールが回転すると上下右左方向が変わると思うので使用先で
 オーバーライドして書き換えましょう。
  ans : ジョイスティックの状態(方向)を返す
     0 = 操作なし 1 = 下 2 = 右 3 = 中央ボタン 4 = 上 5 = 左

 ※ スイッチサイエンスこちらのシールドはこの関数は使用できません。 *1)
  ("V2"のボタンとジョイスティックはI2Cで通信する様です。)

《その他》

ST7735のSPI速度は書き込み15MHz程で読み込みが6MHz程位行ける様だ、
ここでは、16MHz/2で動作させている、SPIライブラリにはこれ以上早い設定がない。
SPI接続なので表示速度は速くはない、
又、skST7735xライブラリはきむしげ作なので遅い、プログラムは軽いがぁ....
まあ、チョットぉ表示させるには良いのではないでしょうか?




リンクの見直し(*1) 2020/03/20


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.