フォト
2024年9月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          
無料ブログはココログ

VFDモジュール

2018年8月 6日 (月)

アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (3)

前回のアクティブマトリクス蛍光表示管の実験用表示モジュールの改訂版、
MW25616L実験表示モジュールver.2の利用の続きです。

改訂版では、I2C接続用端子が新たに追加さました。

01 03

下からGNDVCCA4(SDA)A5(SCL)D2が割り付けられており、
付属のRTCモジュール(DS3231利用)が直接接続出来ます。

02

前回に引き続き、豊四季タイニーBASIC for Arduino機能拡張版(以降豊四季Tiny BASIC拡張版と略称)にて
動作確認をしてみます。

DATEコマンドで時刻を参照すると、当然正しく無いですが参照できました。

01_2

SETDATEコマンドで正しい時刻を設定します。

02_2


次に、下記のプログラムにてVFDに時刻を表示してみます。
10 VCLS:VBRIGHT 100
20 GETTIME H,M,S
30 VMSG 0,#-2;"現在の時刻は";H;"時";M;"分";S;"秒です"
40 WAIT 1000
50 VSCROLL 256,-1
60 GOTO 20

動かして見ると、表示内容を更新する毎にノイズが乗るような感じで乱れたりします。

04

05

旧バージョンでも試してみましたが、同様の現象が発生しました。
う~ん、BASICインタプリタのバグか?

雰囲気的に「データ転送時のデータ化け」っぽく、
調査していくと、VFDふぁんさんが公開しているサンプルソースのコメントに
ヒントがありました。

どうも、輝度設定(VBRIGHTコマンド)に影響するようです。
輝度を最大輝度の設定(VBRIGHT 255)にすると正常に表示出来ました。

VFDの輝度はディスプレイイネーブル(EN)をPWMを使ってオン・オフ(表示のオンオフ)して
調整しているのですが、これがスイッチングノイズを発生させて影響を及ぼすようです。

VFDの供給元のノリタケの技術サポート公開資料の
「アクティブマトリクス型CL-VFD アプリケーションノート - インターフェースインターフェースについて」

  スイッチングノイズによる誤動作(データ誤取込)を防止するため、
  データ書き込み中はENをH→L、あるいはL→Hに変えないでください。

との記載がありました。

ということで、データ転送中は輝度設定を255(最大輝度)にしなければならないことが
分かりました。利用の際の制約事項ですね。以後気を付けることにします。


問題解決後の実際の動作の様子




プログラムの自動起動の設定

利用の都度、プログラムをRUNコマンドで実行させるのはちょっと面倒です。
電源ON後、時刻表示プログラムをロードして実行するようにしたいですね。

豊四季Tiny BASIC拡張版には保存したプログラムを電源ON時に自動起動する機能があります。
デフォルトでは、自動起動判定用ピンD7HIGHの場合、内部EEPROMに保存されているプログラムを実行します。

RTCモジュール端子のD2RTCモジュールSQW(割り込み通知用の入力)用ですが、
この信号はアクティブLOWなので、RTCモジュールを接続した状態で起動すると
D2は常にHIGHとなります。これは利用出来ますね。

D2を、豊四季Tiny BASIC拡張版の自動起動判定用ピンに利用し、
RTCモジュールが接続されていれば、電源ON時はD2HIGHなので自動起動出来ます。

そこで、スケッチのttconfig.hAutoPinの設定を7から2に変更して書き込みます。

08

書き込み後、現在時刻表示プログラムをコピペしてSAVEコマンドで保存します。
VBRIGHT 255の修正は忘れずに)

09_2

ダイソーの300円 モバイルバッテリーをつなげて動かしてみました。

06

保存してプログラムが自動起動して、時刻を表示してくれました。
いい感じで動いてくれました。
単体で動作出来るのは良いですね。

07

折角ここまで来たので、何か実用的なものを作ってみましょう。
次に、I2C接続の湿度・温度センサーもつなげて時刻・湿度・温度を表示出来るように
したいと思います。


2018年7月28日 (土)

アクティブマトリクス蛍光表示管の実験用表示モジュールver.2の動作確認

VFDふぁんさんより、アクティブマトリクス蛍光表示管の実験用表示モジュール
改訂版 MW25616L実験表示モジュールver.2(VF1711) を頂きました。

最近、電子工作のモチベーションが下降気味でしたが、一気にテンションが上がりました!
VFDふぁんさん、ありがとうございます。

こんな感じのモジュールです。

MW25616L_1

初版からは、いくつか改良が施されているようですが、
変更点については、おって確認したいと思います。

MW25616L_2

改訂版は基板の上下にアクリル版が標準装備になったみたいです。
これは有難いです。ショートの防止になります。

実は、初版の利用において、私の不注意で基板の裏に何かが接触してショートし、
破損させてしまいました(その後、VFDふぁんさんに修理して頂き、再稼働出来ました)。

早速、電源を入れてみるとデモスケッチが動きました。

MW25616L_3

コントラスト・輝度が強くで、私のデジカメでは絞らないと綺麗に撮影出来ませんでした。
表示は鮮明で読みやすいです。

豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)を動かす

早速、「豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)」
動作確認をしてます。

折角なので、利用出来るまでの手順を復習がてらまとめてみました。

まずは、スケッチの書込みを行います。
プロジェクトの一式を、下記からダウンロードして解凍します。
   ・ttbasic_MW25616L-master.zip

解凍すると次のファイルが得られます。

02

次に、Arduino IDEを起動して上記のフォルダtbasic 内のttbasic.inoを開きます。

03

デフォルトの設定では、アクティブマトリクス蛍光表示管の利用が出来ません。

ttconfig.hの設定の一部を下記のように変更(赤字の項目)します。
// ** 機能利用オプション設定 *************************************************
#define USE_CMD_PLAY   1  // PLAYコマンドの利用(0:利用しない 1:利用する デフォルト:1)
#define USE_CMD_I2C    1  // I2Cコマンドの利用(0:利用しない 1:利用する デフォルト:1)
#define USE_CMD_VFD    1  // VFDモジュールコマンドの利用(0:利用しない 1:利用する デフォルト:0)
#define USE_RTC_DS3231 1  // I2C接続RTC DS3231の利用(0:利用しない 1:利用する デフォルト:1)
#define USE_I2CEEPROM  1  // I2C EEPROM対応(0:利用しない 1:利用する デフォルト:1)
#define USE_SYSINFO    0  // SYSINFOコマンド(0:利用しない 1:利用する デフォルト:0)
#define USE_GRADE      0  // GRADE関数(0:利用しない 1:利用する デフォルト:1)
#define USE_DMP        0  // DMP$関数(0:利用しない 1:利用する デフォルト:1)
#define USE_IR         0  // IR関数(0:利用しない 1:利用する デフォルト:1)
#define USE_ANADEF     1  // アナログピン定数A0~A7orA15(0:利用しない 1:利用する デフォルト:1)
#define USE_SO1602AWWB 0  // 有機ELキャラクタディスプレイ SO1602AWWB(0:利用しない 1:利用する デフォルト:0)

アクティブマトリクス蛍光表示管の利用にはフラッシュメモリ利用域を消費するため、
他の機能を無効にする必要があります。
今回は、利用頻度の少ない、GRADEコマンド、DMPコマンド、IR関数を無効にしました。

スケッチを書き込みます。

01


次にTeraTarmを起動して、MW25616L実験表示モジュールに接続します。

通信条件

   05

端末の設定

   改行コード、漢字-受信、漢字-送信を下記の設定にします。

   06

接続します。何も表示されない場合は、F5キーを押して再表示させてます。

    04

試しに次のプログラムをコピー&ペーストして実行してみます。
10 VCLS
20 VMSG 10,"CL-VFD実験用表示モジュールVer2登場!"
30 VSCROLL 256,5
40 WAIT 300
50 GOTO 20

07

問題なく動作しました。

Dscn8487

実際に動いている様子です。



問題無く動いているようです。
実際は、もっと鮮明で綺麗な表示なのですが、
私のデジカメの動画撮影機能では、綺麗に撮影出来ませんでした。

もうすこし、動作確認を続けてみます。

2018年3月18日 (日)

豊四季タイニーBASIC for Arduino機能拡張版 作成しました

取り組んでした「豊四季タイニーBASIC for MW25616L実験用表示モジュール」の作成を
もう少し汎用化して、Arduino Uno用にしました。

MW25616L実験用表示モジュールの対応はオプション機能としました。
(ttconfig.hの機能選択を修正すること対応)

01

  公開サイト
    豊四季タイニーBASIC for Arduino機能拡張版(+ VFD MW25616L対応)
    https://github.com/Tamakichi/ttbasic_MW25616L

  このプログラムはTetsuya Suzuki氏の   豊四季タイニーBASICをベースにしています。

   オリジナル版
     配布サイト https://github.com/vintagechips/ttbasic_arduino

  オリジナル版からの主な機能強化
    ・プログラム領域を256バイトから1024に拡張
    ・プログラムのセーブ・ロードに対応(内部EEPROM、I2C EEPROM)
    ・スクリーン制御(LOCATE、COLOR、ATTR、CLS)
    ・全角文字対応(シフトJISコード)
    ・ラインエディタ機能強化(カーソル移動、指定行の内容表示等)
    ・2進数、16進数表記サポート(`10101111、$ABCD)
    ・演算子の追加(ビットシフト演算や論理積・和など)
    ・IF文でELSEが利用出来る
    ・GOTO、GOSUBでラベルが使える(GOTO "LOOP")
    ・GPIO対応(デジタル入出力、アナログ入力、PWM、I2C、SHIFTIN、SHIFTOUT、PULSEIN)
    ・プログラム編集コマンドの追加(RENUM、DELETE)
    ・リセット時プログラム自動起動対応
    ・I2C RTC DS3231対応(DATE、DETDATE、GETDATE、SETDATE)

  BASIC言語のプログラム開発はターミナル上で行います。
  雰囲気的には、次の動画のような感じです。

   8チャンネルアナログ入力サンプルプログラム 
   

ターミナル上でもちょっとした、動きのある表示も可能ですね。

性能評価
さて、8ビットマイコン AVRでのTiny BASIC、性能的にはどうなんでしょう?
下記の3万回ループ処理を32ビット ARMマイコン搭載のイチゴジャムと比較してみました。

10 ?TICK()
20 FOR A=1 TO 30000
30 V=V+1
40 NEXT A
50 ?V
60 ?TICK()
測定結果 
  ・豊四季 Tiny BASIC Arduino(8ビット AVR)機能拡張版
    2.262秒
  ・イチゴジャム 1.2b56 最新版 (32ビット ARM)
   81.333秒 (ビデオ出力停止時 44.31秒)
  ・イチゴジャム ラズベリーパイ版 (BASIC RPi1.2.5 ラズパイ 2 900MHz)
   2.517秒
なんと、予測外の結果!  イチゴジャムの約36倍の処理能力でした。

イチゴジャム36台分の処理を1台でこなせる性能です。
ラズパイ2版 よりも早い!

追記 2018/03/23
  イチゴジャムをビデオ停止(VIDEO 0)した場合も測定してみました。
  それでも約20倍の処理能力でした。
「え、測定ミス? プログラムミス?」と思い何回も見直してしまいました。
AVRマイコンは確かに高性能ですが、同クロック 16MHz LPC1114(ARM cortex-M0)
よりは劣ると思います。


訂正(上記消し線の部分) 2018/03/20
  てっきりイチゴジャムは16MHzで稼働していると思っていたのですが、
  48MHzで動作しているようです。
  となると、16MHz Atmega328の3倍以上の処理能力があるはずでは..

豊四季タイニーBASIC for Arduinoは、ソース公開、分かり易さ重視です。
結構、無駄な処理をしています。
コマンドの処理を行う処理関数の検索を単純検索で行っており、コマンドの実行の都度、
最悪100回以上比較処理を行う等、特にパフォーマンス重視の作りではないです。
それでもイチゴジャムの約36倍..
非常に謎です..

追記

PLAY文による演奏デモ

演奏データは、下記のサイトに公開されているのもを流用させて頂きました。

・主体性の無いページ http://astr.me.land.to
   ねこふんじゃった! http://astr.me.land.to/tool/mabi/mml/nekof.htm
10 '猫ふんじゃった
20 PLAY "L16D+C+R8F+RF+RD+C+R8F+RF+RD+C+L8RF+RF+R"
30 PLAY "L16FRFRD+C+R8FRFRD+C+R8FRFRD+C+"
40 PLAY "L8RFRFRL16F+RF+RD+C+R8F+RF+RD+C+R8F+RF+RD+C+"
50 PLAY "L8RF+RF+RL16FRFRD+C+R8FRFRD+C+R8FR"
60 PLAY "L16FRD+C+L8RFRFRL16F+RF+RD+C+L8RF+RF+RF+RF+RF+RF+R"
70 PLAY "L16FRFRD+C+L8RFRFRFRFRFRFR"
80 PLAY "L16F+RF+RD+C+R8F+RF+RD+C+R8F+RF+RD+C+"
90 PLAY "L8RF+RF+RL16FRFRD+C+R8FRFRD+C+R8FRFRD+C+"
100 PLAY "L8RFRFRL16F+RF+R8.F+RC+C+D8C+8.FRF+"

2018年2月15日 (木)

アクティブマトリクス蛍光表示管の実験用表示モジュールの試用 (2)

間が空きましたが、
アクティブマトリクス蛍光表示管(CL-VFD) MW25616L 実験用表示モジュールの試用の続きです。

VFD

前回の続きからは方向を変え、
「豊四季タイニーBASICを乗せて制御すれば面白いのでは?」と思い、やってみました。

モジュール的にはArduino互換なので、先日メモリー節約したバージョンに
micro:bit版の機能を一部を結合して実装しました。
micro:bit版の流用で2、3日くらいで実装できました。

下記のサイトにてとりあえず公開いたします。
興味のある方は参照願います。
・豊四季タイニーBASIC for MW25616L実験用表示モジュール
   https://github.com/Tamakichi/ttbasic_MW25616L

リファレンス・マニュアルも付けました。
文法やコマンド等の詳細については、リファレンス・マニュアルを参照して下さい。
 
作成には、豊四季タイニーBASICのオリジナル版を利用しています。
また、VFDの制御には、「VFDふぁん」さんが公開している参考プログラムを利用しています。

さて、このバージョンで、どんなことが出来るかというと、

シリアル接続して、直接コマンドを打って、
VFDにメッセージ文の表示が可能です。全角文字もそのまま入力出来ます。

02

コマンドで簡単に表示できるのは、やはり良いです!
従来(micro:bit版)のコマンドにVDF制御のために、以下の専用コマンドを用意しました。

専用コマンド一覧

VBRIGHT :輝度を0(0%)~255(100%)の範囲で設定します。
  例:VBRIGHT 100

VDISPLAY :表示のオン・オフを設定します。
  例:VDISPLAY OFF

VMSG :指定したメッセージ文を指定速度でスクロール表示します。 
   例:VMSG 10,"日本語のメッセージ表示テスト"

VSCROLL :指定長の空白を指定速度でスクロール表示します。
   例:VSCROLL 256,10

VPUT :表示バイトデータを指定速度で直接指定します。
  例:VPUT MEM,16,10

逆に、メモリ的制約からいくつかのコマンドを削除しています。

プログラム例

コマンドを使ったプログラム作成して、ちょっとした動きのある表示も出来ます。
プログラム作成はシリアル接続のスクリーンエディタにて入力出来ます。

10 'VDF表示サンプル
20 TONE 440,100:TONE 880,100
30 @(0)="熱いぞ!埼玉!"
40 @(1)="豊四季タイニーBASIC"
50 @(2)="VFD対応バージョン"
60 @(3)="只今開発中!"
70 @(4)="ちょっとメモリー的に厳しい.."
80 VBRIGHT 255
90 FOR S=0 TO 4
100 VCLS:VMSG 10,STR$(@(S))
110 FOR I=0 TO 255 STEP 15
120 VBRIGHT 255-I:WAIT 40
130 NEXT I
140 WAIT 500
150 VBRIGHT 255:WAIT 500
160 VSCROLL 256,3
170 WAIT 500
180 NEXT S
190 GOTO 80
I2C接続のRTCモジュールを使って時刻をリアルタイム更新表示するプログラム
(2018/08/06 修正:10行のVBRIGHT 100をVBRIGHT 255の修正)

03

10 VCLS:VBRIGHT 255
20 @(0)="時","分","秒"
30 M=ARRAY+6:POKE M,0
40 R=I2CR($68,M,1,M+1,7)
50 VMSG -1,"現在の時刻は"
60 FOR I=0 TO 2
70 VMSG -1,HEX$(PEEK(M+3-I),2);STR$(@(I))
80 NEXT I
90 VMSG 0,"です"
100 WAIT 1000
110 VSCROLL 256,-1
120 GOTO 40

スライド抵抗器でVFD上に表示しているバーをドット単位で左右に動かすプログラム

05

10 @(0)=$FFFF
20 A=ANA(20)>>2:IF A=0 A=1
30 VPUT ARRAY,2,-1
40 VSCROLL A,0
50 VSCROLL 256,-1
60 WAIT 20
70 GOTO 20

色々と機能てんこ盛りの結果、フラッシュメモリの利用率は99%!
メモリ容量的に、micro:bit版と比べると色々と制約が発生しました。
  ・プログラムサイズは 512バイトまで
  ・内部EEPROMに保存できるプログラムは2本まで

  ・変数はA~Z、配列変数 @(0)@(15)まで
  ・スクリーンエディタの画面サイズは 横48文字x縦8行 固定

他に色々と制約があります。

暫く、動作確認をして修正を行っていきます。
スケッチは一部を修正すれば、Arduino UNOでも利用出ます。

参考サイト
・VFDふぁん - MW25616L 実験用表示モジュールを使ってみる(2)


追記 2017/02/15(夜)

メモリーの制約からフルスクリーンエディタの画面サイズが横48文字x縦8行はとなり、
長い行のプログラムの作成においては、視野の狭い範囲でのスクロール編集となり、
ちょっと使いづらいです。

そこで、フルスクリーンエディタを有効・無効設定するコマンドを追加しました。

Photo

スクリーンエディタ機能を無効にすると、行単位での編集しか出来ないですが、
これはこれで良いかも。

無効にすると、逆スクロール編集、任意の位置にカーソルを移動しての編集、
画面制御を行うコマンド(LOCATE等)が機能しなくなりますが、
スクリーンエディタ機能を臨機応変に切り替えて利用することで、
とりあえずは実用としてしのげそうです。

2016年7月23日 (土)

アクティブマトリクス蛍光表示管の実験用表示モジュールの試用

Facebookのお友達からお借りしました、「アクティブマトリクス蛍光表示管(CL-VFD)
MW25616L 実験用表示モジュール」を調査中です。

16x256ドットのグラフィック表示が可能なモジュールです。

Dscn5467

制御用にAtmega328pが使われており、Arduino IDE環境にてプログラム開発が出来ます。
いくつか、自由に使えるGPIOピンが開放されており、I2Cやシリアル通信も使えそうです。

日本語フォントROM GT20L16J1Y16を搭載していており、日本語表示も可能です。

Dscn5465

背面にICSP端子があり、この端子経由でSPI接続でSDカードなんかが使えそうですね。

Arduinoと同じようにUSB経由での書込みと電源供給が出来ます。
非常にお手軽に使えるモジュールです。

Dscn5453

プログラムを書きこんで表示で表示してみた様子
公開かさているサンプルスケッチを書きこんで動かしてみました。

Dscn5456_2

輝度が強く、私のデジカメでは綺麗に映すことがが出来ません。光が広がってフォントが
つぶれた映像となってしまいます。動画も撮影したのですが、ダメダメでした。
(何枚も撮って一番よさそうなのを掲載しました)
実際には表示は非常にきれいです。文字が左にスクロール表示します。
日本語のメッセージが表示出来ます。

ただし、日本語フォントROM GT20L16J1Yは私も使ったことがあるのですが、
ひらがな、カタカナ、漢字、全角英数、半角英数そのれぞれのバランスが微妙です。

制御方法について

表示のための制御は比較的簡単のようです。
表示パターンは2バイト16ビットが縦1列に対応しています。そのデータが
横256ドット分、合計512バイト分シーケンシャルに並んでいる構造です。

シフトレジスタを使う要領で4つのSI、CLK、LAT、ENを使ってデータを転送します。
16x256ドット分の4096ビット分のレジスタがあり、4096ビット単位でラッチして
表示データを確定出来ます。

表示機器にはこの形式多く、過去に手掛けて蓄積したノウハウが役立てそうです。

02

03

この構造の場合、表示中の画像に線を書いたり、追記描画するのは苦手です。
追記しようにも、データを送るとシフトされて左に画像全体が移動します。

通常、このような構造で自由に描画するにはフレームバッファ(ワークメモリ)を用います。
一旦、フレームバッファに描画してそのデータを一括送信して表示更新する方法です。

次のような感じです。

04

この方式では一括転送に要する時間が早いほど映像が素早く更新出来ます。
動きのある表示や、リアルタイム更新表示を行う場合は早い方が良いです。

(ちょっと前にやった「4連8x8ドットLEDマトリックス」なんかも同じ方式でやっています)

実際に、フレームバッファを使って1点描画するごとに表示更新を行う処理を
ArduinoのShiftOut()関数を使って行ったところ、目視で5画面/秒程度がやっとな感じでした。

ShiftOut()は無駄に遅いことで有名で、同じ処理を直接I/Oレジスタを操作して
転送を行うとかなり改善します。ShiftOut()とdigitalWrite()と次のような感じで
実装して置き換えるだけで、転送速度は8倍ぐらいに改善しました。

void new_shiftOut(uint8_t dataPin,uint8_t clockPin,uint8_t bitOrder,byte val) {
  uint8_t i;
  uint8_t bit_data = digitalPinToBitMask(dataPin);
  uint8_t bit_clock = digitalPinToBitMask(clockPin);
  volatile uint8_t *out_data = portOutputRegister(digitalPinToPort(dataPin));
  volatile uint8_t *out_clock = portOutputRegister(digitalPinToPort(clockPin));

  for (i = 0; i < 8; i++)  {
    if (bitOrder == LSBFIRST) {
      if(val & (1 << i)) {
        *out_data |= bit_data;
      } else {
        *out_data &= ~bit_data;
      }
    } else {
      if(val & (1 << (7 - i))) {
        *out_data |= bit_data;
      } else {
        *out_data &= ~bit_data;
      }
    }
    *out_clock |= bit_clock;
    *out_clock &= ~bit_clock;
  }
}

inline void new_digitalWrite(uint8_t pin, uint8_t val) {
  uint8_t bit = digitalPinToBitMask(pin);
  volatile uint8_t *out = portOutputRegister(digitalPinToPort(pin));
  if (val == LOW)
    *out &= ~bit;
  else
    *out |= bit;  
}

ShiftOut()なら本来、SPIを使った高速通信に置き換えるのが容易なのですが、
SPIピンとは別ピンに接続されているのがちょっと残念です。
それでも、上記修正で秒20画面位は更新できそうです。

現状、表示する文字列はシフトJIS指定でプログラムに埋め込み、表示画像も
プログラムに埋め込みでちょっと使い勝手が良くないです。

05

この当たり、自作のマルチフォントライブラリ、ビットマップ画像ローダを使って
自由度のあるコンテンツ表示をやりたいなぁと思います。

2016/12/20~  随時追記中

裏の端子にアクセスしやすいように専用の脱着式の基板を作成しました。

Dscn6226

SPI接続にてSDカードを接続。自作のマルチサイズフォントライブラリが動くようになりました(ただし、調整中)。

Dscn6268

SDカードが3.3V駆動にため、電圧レベルの調整をしています。

Photo

動作の様子


8ドット漢字も意外と読めますね。

表示は前述のフレームバッファに一旦書きこんでから、VDFに一括転送しています。
表示するメッセージの指定はUTF-8文字列です。

void demo02() {

  uint8_t font[MAXFONTLEN];   uint16_t x = 0;   uint8_t sz[] = {16,14,12,10,8};   mw_claerbuf();   SDfonts.open(); // フォントのオープン   for (uint8_t i = 0; i < 5; i++) {     char* pUTF8 = "SDカード漢字フォント利用テスト";     SDfonts.setFontSize(sz[i]); // フォントサイズの設定     x = 0;     while ( pUTF8 = SDfonts.getFontData(font, pUTF8) ) { // フォントの取得       mw_drawFont(x, font);       x+=SDfonts.getWidth();     }     mw_update();     delay(1500);     mw_claerbuf();      }   SDfonts.close();  // フォントのクローズ   delay(2000); }

次はメッセージの縦スクロール、SDカードに青空文庫の小説(テキストファイル)入れて
表示出来るようにしてみます。

(つづく)