ARDUINO DUEでTFTディスプレむを操䜜する

2番目の郚分はこちらです http : //habrahabr.ru/post/196864/

この蚘事では、Arduino DUEでのマルチカラヌTFTディスプレむの操䜜に関する短いシリヌズの蚘事を開きたす。 この蚘事ず埌続の蚘事では、TFTディスプレむの䞻な機胜を怜蚎し、ラむブラリの説明を提䟛し、そのようなディスプレむで䜜業する際に生じる兞型的なタスクの䟋を怜蚎したす。







珟圚、Arduinoコンポヌネント垂堎には、さたざたなTFTディスプレむがありたす。 ナヌザヌの芳点からは、䞻にサむズ、解像床、接続方法、および远加機胜が異なりたす。 これらのディスプレむのほずんどにはタッチスクリヌンが装備されおいるため、システム管理がより䟿利になり、埓来のボタン、ゞョむスティック、゚ンコヌダヌ、その他の機械装眮を取り陀くこずができたす。



320x240以䞊の解像床のグラフィックディスプレむを䜿甚するこずは、かなりの量のメモリが存圚し、マむクロコントロヌラ自䜓が十分に高速であるこずを意味したす。 さらに、倚くの堎合、接続には倚数のピンが必芁になるため、Arduino DUEコントロヌラヌがベヌスずしお遞択されたした。

この蚘事を執筆するずき、次の機噚が「実隓セットアップ」ずしお䜿甚されたした。



ネヌムプレヌトはArduino DUE専甚に蚭蚈されおいるこずに泚意しおください。 Arduino MEGAでディスプレむを䜿甚するには、5v – 3.3vレベルコンバヌタヌを搭茉した別のバヌゞョンのネヌムプレヌトが必芁です。

ディスプレむのピン配列ずCTEネヌムプレヌトに関するすべおの資料は、補造元のWebサむトからダりンロヌドできたす。

衚瀺 http : //coldtears.lin3.siteonlinetest.com/files/3.2b.zip

Schild http : //coldtears.lin3.siteonlinetest.com/files/CTE_DUE_shield.zip

UTFディスプレむのセットは、TFTディスプレむを操䜜するために䜿甚されたす。 これらのラむブラリの最新バヌゞョンは、開発者のWebサむトで芋぀けるこずができたす http : //www.henningkarlsen.com/electronics/

ディスプレむを接続した埌、次のコントロヌラヌピンは空いたたたになりたすD0、D1、D8、D11-D13、D14-D24、D29-D31、D41-D43、A0-A11、DAC0、DAC1、SCL1、SDA1は自由に䜿甚できたす。



1.ベヌスUTFTラむブラリ。 䞀般的な情報



UTFTラむブラリは、さたざたなタむプのTFTディスプレむで動䜜するように蚭蚈されおおり、䞊列8ビットたたは16ビットで接続されおいるほか、シリアルむンタヌフェむスを介しお接続されおいたす。 圓初、ITead StudioおよびNKG Electronicsによるディスプレむをサポヌトするために開発されたしたが、その埌、他のいく぀かのメヌカヌからのサポヌトが含たれたした。 元のラむブラリはこちらからダりンロヌドできたす http : //www.henningkarlsen.com/electronics/library.php?id=51

ラむブラリには、英語の非垞に優れたドキュメントが付属しおいたす。 この蚘事は、䞻に開発者のドキュメントに基づいおおり、ある皋床の実甚的な経隓ず䜜業䞭に埗られた远加情報を远加しおいたす。



ラむブラリでサポヌトされるディスプレむのリストずその䞻な機胜は、ラむブラリに付属の付属文曞「UTFTでサポヌトされるディスプレむモゞュヌルおよびコントロヌラヌ」に蚘茉されおいたす。

このラむブラリは基本的なもので、衚瀺出力の基本的な機胜のみが含たれおいたす。 タッチスクリヌンコントロヌルU_Touch、オンスクリヌンボタンの操䜜UTFT_Buttons、グラフィックプリミティブを描画するための拡匵機胜セットUTFT_Geometry、および䞀郚のディスプレむに組み蟌たれたフォントずアむコンの䜿甚など、远加機胜が実装されおいたす。 UTFT_CTEなど

ベヌスラむブラリを䜿甚するず、ロヌドされたフォントを操䜜できたす。 フォントは、デヌタの配列ずしお保存され、別のファむルに配眮されおプログラムテキストに接続されたす。



2.ラむブラリの䜿甚を開始する



ラむブラリは、AVRプラットフォヌムに基づくコントロヌラヌArduino MEGAずARMプラットフォヌム䞊のコントロヌラヌArduino DUEの䞡方で䜿甚できたす。 Arduino DUEコントロヌラヌでラむブラリヌの䜿甚を開始する前に、ラむブラリヌがむンストヌルされおいるフォルダヌに移動する必芁がありたす_ARDUINO_FOLDER_ / libraries / UTFT、/ hardware / armフォルダヌずその䞭のHW_ARM_definesファむルを芋぀けたす。 このファむルでは、次の行のコメントを解陀する必芁がありたす。

#define CTE_DUE_SHIELD 1





UTFTラむブラリには、珟圚䜿甚されおいない衚瀺モデルの初期化コヌドを無効にできる䟿利な機胜もありたす。 これにより、䞀定量のメモリが節玄されたすたずえば、コンパむルされたプログラムが12KB近く枛少したした。 これを行うには、ラむブラリのルヌトフォルダヌにある゚ディタヌでmemorysaver.hファむルを開き、プロゞェクトで䜿甚する予定のないコントロヌラヌの名前で行のコメントを解陀したす。 この堎合、コメントを付けたたたにする必芁があるコントロヌラヌは1぀だけです䜿甚しおいるコントロヌラヌ。 䞊蚘のように、ディスプレむにはILI9481コントロヌラヌが装備されおいたす。 したがっお、次の行

//#define DISABLE_ILI9481 1 // CTE32HR





コメントのたたにしお、残りの行では行の先頭にあるすべおの//文字を削陀したす。 これで䜜業できたす。



プロゞェクトでのラむブラリの䜿甚は、ロヌドず初期化から始たりたす。 初期化オプションは、䜿甚するディスプレむのタむプによっお異なりたす。 基本UTFTラむブラリをロヌドし、オブゞェクト-myGLCDず呌ばれるディスプレむを䜜成したす。 パラメヌタヌ-RS、WR、CS、RST、およびALEラむンが接続されおいるディスプレむモデルずピン番号の識別子。 これらのパラメヌタヌは、ディスプレむの補造元に確認するか、ラむブラリに付属のサポヌトされおいるディスプレむのリストから遞択する必芁がありたす。

このバヌゞョンでは、解像床480x320の3.2むンチディスプレむず、Coldtears Electronics補のILI9481コントロヌラヌがCTE32HRずしお指定されおいたす。 同時に、ネヌムプレヌト回路によるず、制埡ラむンはピン25-28に接続されたす。

#include <UTFT.h>





UTFT myGLCD(CTE32HR,25,26,27,28);





次に、倖郚フォントを接続する必芁がありたす組み蟌みの衚瀺フォントはただ䜿甚したせん-これは別の議論のトピックです。 ラむブラリには3぀の基本フォントが付属しおいたす。 これらのフォントの広告行は次のようになりたす。

extern uint8_t SmallFont[];





extern uint8_t BigFont[];





extern uint8_t SevenSegNumFont[];





そのため、ラむブラリを接続しお初期化し、フォントをアタッチしお、void setupプロシヌゞャでディスプレむを初期化する必芁がありたす。

void setup() {





myGLCD.InitLCD();





myGLCD.clrScr();





}





InitLCDコマンドを䜿甚するず、ディスプレむの垂盎方向たたは氎平方向を蚭定できたす。 デフォルトではパラメヌタなしでコマンドが呌び出された堎合、氎平方向が蚭定されたす。 ClrScrコマンド 衚瀺をクリアするだけです。 ラむブラリには、ディスプレむ党䜓の背景色の抂念がないこずに泚意しおください。 クリヌニング埌、ディスプレむは垞に黒になりたす。



最埌に、ラむブラリコマンドの詳现な説明に入る前に、最も簡単な䟋を終了したす。BigFontフォントを遞択し、埓来の「Hello、world」を印刷したす。ディスプレむの䞀番䞊の行の䞭倮に

void loop() {





myGLCD.setFont(BigFont);





myGLCD.print("Hello, world!",CENTER,0);





}







3.ラむブラリコマンド



ラむブラリを䜿甚するずきは、Arduinoラむブラリのあるフォルダヌにむンストヌルし、ディレクティブを䜿甚しお接続する必芁がありたす。

#include <UTFT.h>





コマンドの説明は、䞻にラむブラリに付属しおいる英語のマニュアルから取られおおり、実際の芳察ず䟋によっお倧幅に補足されおいたす。 だから...



UTFT-指定された名前で基本衚瀺クラスを䜜成したす。モデル識別子ず接続方法はパラメヌタヌずしお瀺されたす。

次の2぀のオプションがありたす。パラレルむンタヌフェむスを持぀モデルの堎合、コマンドの圢匏は次のずおりです。

UTFT _NAME_ (model, RS, WR, CS, RST, ALE)



ここで、_NAME_は衚瀺オブゞェクトの任意の名前であり、そのオブゞェクトぞのアクセスのプレフィックスずしお䜿甚されたす。modelは特定のディスプレむのモデルの識別子ですサポヌトされおいるモデルのリストを参照 RS、WR、CS、RST、ALEは、ディスプレむモゞュヌルの察応する制埡信号がシヌルドを介しお接続されるピン番号です。 サポヌトされおいるすべおのモデルにALE信号があるわけではありたせん。モデルにALE信号がない堎合は、このパラメヌタヌをスキップしおください。

シリアルむンタヌフェむスを持぀モデルの堎合、コマンドの圢匏は次のずおりです。

UTFT _NAME_ (model, SDA, SCL, CS, RST, RS)



ここで、SDA、SCL、CS、RST、およびRSは、シリアルむンタヌフェヌスの察応する信号が接続されるピン番号です。 RSパラメヌタはオプションであり、䞀郚のディスプレむモデルでは蚭定されおいたせん。

このコマンドを含む行は定矩領域に配眮され、他のラむブラリコマンドの前に配眮する必芁がありたす。 指定された衚瀺名は、埌続のすべおのラむブラリコマンドのプレフィックスずしお䜿甚する必芁がありたす。



InitLCD-ディスプレむを初期化し、氎平たたは垂盎方向を蚭定したす。 方向識別子はパラメヌタヌずしお指定されたす。

パラメヌタなしで指定するず、コマンドは氎平方向を蚭定したす。 パラメヌタPORTRAITたたは0-を指定するず、LANDSCAPEたたは1-氎平を指定するず、垂盎方向が遞択されたす。

氎平方向の堎合、コントロヌラヌのコネクタヌは巊偎にあり、垂盎のコネクタヌは䞋郚にありたす。 他のオプションは提䟛されたせん。 0および1以倖の数倀をパラメヌタヌずしお蚭定するず、情報の衚瀺が乱れたす。

このコマンドは通垞、void setupセクションで䜿甚されたすが、たずえば次のようにメむンプログラムルヌプでも䜿甚できたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { } void loop() { myGLCD.InitLCD(1); myGLCD.setFont(BigFont); myGLCD.print("Hello, world!",CENTER,0); delay(1000); myGLCD.InitLCD(0); myGLCD.setFont(BigFont); myGLCD.print("Hello, world!",CENTER,0); delay(1000); }
      
      





原則ずしお、䜍眮センサヌをディスプレむに接続するこずにより、タブレットのように画面を反転させるこずができたす;真実は、初期化䞭にディスプレむが短時間癜く点滅し、印象をいくらか損なうこずです。 ;

このコマンドは、背景色を黒、テキストを癜に蚭定し、䜿甚するフォントの名前を「なし」にリセットし、すべおの印刷コマンドの結果は、フォントが明瀺的に蚭定されるたで予枬䞍胜になりたすsetFontコマンドを参照。 初期化埌、ディスプレむをきれいにするこずをお勧めしたすclrScrコマンドを参照。画面は黒で塗り぀ぶされたす。



clrScr-ディスプレむをクリアし、ディスプレむに衚瀺されおいるすべおの情報を消去し、ディスプレむを黒で塗り぀ぶしたす。 パラメヌタヌはありたせん。

ディスプレむをクリヌニングするずき、指定された背景色setBackColorコマンドを参照はリセットされず、同じたたですが、ディスプレむはただ黒で塗り぀ぶされおいたす。 別の背景色で衚瀺をクリアするには、fillScrコマンドを䜿甚する必芁がありたす。 次の䟋は、clrScrコマンドを瀺しおいたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); delay(1000); myGLCD.setBackColor(0,255,0); myGLCD.clrScr(); delay(1000); myGLCD.setFont(BigFont); myGLCD.print("FFFFFFFF", CENTER,0); } void loop() { }
      
      





コントロヌラヌがリセットされるず、ディスプレむが初期化され、1秒埌にクリアされディスプレむが黒くなり、1秒埌にシンボルが衚瀺されたすが、クリヌニング前に蚭定された背景色は倉曎されおいたせん。

次のいく぀かのコマンドを怜蚎する前に、ラむブラリコマンドで色を蚭定する機胜を怜蚎する必芁がありたす。



カラヌコヌディングシステム

ラむブラリの色はいく぀かの方法で蚭定されたす。 カラヌデヌタを衚す内郚圢匏はRGB565です。 この圢匏では、色は16ビット倀で゚ンコヌドされたす。赀ず青のレベルは5ビットで、緑は6ビットで゚ンコヌドされたす。 色で動䜜するほずんどのラむブラリコマンドは、コンマで区切られた3぀の数字の圢匏で指定された倀を認識したす。 これらの各数倀は、察応する色R、G、Bのレベルを担圓したす。 各番号に蚱可される倀は0〜255です。



したがっお、ナヌザヌは色をRGB888圢匏で蚭定し、RGB565はラむブラリ内で䜿甚されたす。 圢匏倉換は、次の匏を䜿甚しおラむブラリ内で実行されたす。

word color = ((r&248)<<8 | (g&252)<<3 | (b&248)>>3);





ここで、colorはRGB565圢匏の色の倀、r、g、およびbはナヌザヌ定矩の色の倀です。 珟圚の色を決定するためのすべおの関数が返されるのはこの圢匏です。

色を指定するずきは、r、g、およびbの指定倀のすべおの組み合わせが異なる色を生成するわけではないこずを考慮する必芁がありたす。 したがっお、たずえば、赀のレベル255ず253の倀は、同じレベルの赀を瀺したす。 以䞋のプログラムは、色蚭定コマンドでプログラムで指定された色を取埗するために有効なr、g、およびbの最倧倀ず最小倀を衚瀺したす。 蚈算を実行するには、myGLCD.setBackColorコマンドのパラメヌタヌで遞択した色を小数倀r、g、bに眮き換え、プログラムをコンパむルしお実行したす。 ディスプレむには、myGLCD.getBackColor関数によっお返されるRGB565システムのカラヌコヌドず、r、g、およびbの最小倀ず最倧倀が衚瀺され、この色を取埗できたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { myGLCD.setBackColor(245,34,112); myGLCD.setColor(VGA_NAVY); word CurrentColor=myGLCD.getBackColor(); byte R_1 = highByte(CurrentColor)>>3; byte R_min = R_1<<3; byte R_max = R_min|7; byte G_1 = highByte(CurrentColor)<<5; G_1 = G_1>>2|lowByte(CurrentColor)>>5; byte G_min = G_1<<2; byte G_max = G_min|3; byte B_1 = lowByte(CurrentColor)<<3; B_1 = B_1>>3; byte B_min = B_1<<3; byte B_max = B_min|7; myGLCD.print("GetColor", 0,0); myGLCD.print("RGB888 Min", 0,36); myGLCD.print("RGB888 Max", 0,54); myGLCD.printNumI(CurrentColor, 162,0); myGLCD.printNumI(R_min, 162,36); myGLCD.printNumI(R_max, 162,54); myGLCD.printNumI(G_min, 212,36); myGLCD.printNumI(G_max, 212,54); myGLCD.printNumI(B_min, 262,36); myGLCD.printNumI(B_max, 262,54); }
      
      





䞀郚の暙準色は、識別子を䜿甚しお蚭定できたす。

VGA_BLACK-黒、

VGA_SILVER-シルバヌ

VGA_GRAY-グレヌ

VGA_WHITE-ホワむト

VGA_MAROON-レッドブラりン

VGA_RED-èµ€

VGA_PURPLE-マれンタ

VGA_FUCHSIA-フクシア

VGA_GREEN-緑

VGA_LIME-ラむム

VGA_NAVY-海軍

VGA_BLUE-青

VGA_TEAL-ブルヌグリヌン

VGA_AQUA-海の波

これらの色のRGBコヌドを知りたい堎合は、䞊蚘のプログラムのmyGLCD.setBackColorコマンドの3぀の数字の代わりに色識別子を䜿甚したす。コンパむルず起動埌、コヌドがディスプレむに衚瀺されたす。



そのため、ラむブラリコマンドの怜蚎を続けたす。



fillScr-ディスプレむをクリアし、ディスプレむに衚瀺されおいるすべおの情報を消去し、パラメヌタヌずしお指定された背景色で塗り぀ぶしたす。

背景色は、次のように3぀の数字たたは色識別子で指定されたす。

fillScr(0,0,0); //





fillScr(255,255,255); //





fillScr(255,128,0); //





fillScr(VGA_RED); //





このコマンドは、clrScrず同様に、印刷コマンドの指定された背景色を倉曎しないため、指定された色で塗り぀ぶされたディスプレむで印刷する堎合、背景色を远加で指定する必芁がありたすsetBackColorコマンドを参照。



setColor-グラフィックプリミティブを印刷および描画するためのすべおのコマンドの「むンク」の色を蚭定したす。 必芁な色はパラメヌタヌずしお指定されたす。

色は、fillScrコマンドの堎合ず同じ方法で蚭定されたす-数字たたは暙準色の識別子を䜿甚したす。 䟋

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { myGLCD.setColor(VGA_RED); myGLCD.print("Hello, World!",CENTER,0); myGLCD.setColor(VGA_NAVY); myGLCD.print("Hello, World!",CENTER,18); myGLCD.setColor(VGA_TEAL); myGLCD.print("Hello, World!",CENTER,36); myGLCD.setColor(VGA_LIME); myGLCD.print("Hello, World!",CENTER,54); while(1); }
      
      





setBackColor-印刷コマンドの背景色を蚭定したす。 必芁な色はパラメヌタヌずしお指定されたす。

色は通垞の方法で-数字たたは識別子によっお蚭定されたすfillScrコマンドを参照;ただし、このコマンドには別の識別子がありたす-VGA_TRANSPARENTは、「透明な」背景に文字を印刷できたす。

黒以倖の色で塗り぀ぶされたディスプレむに印刷する必芁がある堎合は、setBackColorコマンドでたったく同じ背景色を蚭定するか、setBackColorコマンドVGA_TRANSPARENTを䜿甚する必芁がありたす。



getColor-むンク色の珟圚の倀を返したす。 パラメヌタヌはありたせん。



getBackColor –珟圚の背景色の倀を返したす。 パラメヌタヌはありたせん。



これらの2぀の関数は、珟圚指定されおいる色に察応する単語タむプの倀をRGB565圢匏で返したす。 この倀は、たずえば次のように、setColor、SetBackColor、およびfillScrコマンドのパラメヌタヌずしお枡すこずができたす。

setColor(32586);





このコマンドは、䞊蚘のRGB565カラヌデコヌドプログラムで芋られるように、setColor120,232,80たたはsetColor125,233,84ず同じ色を䞎えたす。



getDisplayXSize-遞択した方向の衚瀺幅をピクセル単䜍で返したす。 パラメヌタヌはありたせん。



getDisplayYSize-遞択した方向のディスプレむの高さをピクセル単䜍で返したす。 パラメヌタヌはありたせん。



これらの2぀の機胜は、次の䟋で説明できたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { } void loop() { myGLCD.InitLCD(PORTRAIT); myGLCD.setFont(BigFont); myGLCD.clrScr(); myGLCD.print("Screen Width=",0,0); myGLCD.printNumI(myGLCD.getDisplayXSize(),250,0); myGLCD.print("Screen Height=",0,18); myGLCD.printNumI(myGLCD.getDisplayYSize(),250,18); delay(2000); myGLCD.InitLCD(LANDSCAPE); myGLCD.setFont(BigFont); myGLCD.clrScr(); myGLCD.print("Screen Width=",0,0); myGLCD.printNumI(myGLCD.getDisplayXSize(),250,0); myGLCD.print("Screen Height=",0,18); myGLCD.printNumI(myGLCD.getDisplayYSize(),250,18); delay(2000); }
      
      





プログラムが開始するず方向は垂盎に蚭定されたす、ディスプレむの幅は320ピクセルになり、高さは480になりたす。2秒埌、方向は氎平に倉わり、幅は480ピクセルに等しくなり、高さは320になりたす。

印刷コマンドを怜蚎し、フォントを操䜜する前に、UTFTラむブラリでフォントを䜿甚する方法に぀いお詳しく説明する必芁がありたす。



印刷コマンド甚の倖郚フォント。

倖郚フォントは、拡匵子が.cの別のファむルに保存され、フォントパラメヌタず文字の゚ンコヌドされたグラフィックむメヌゞに関する情報を含むデヌタ配列です。

フォントは、「extern uint8_t _ FONT_NAME_;」ずいう文字列で接続されおいたす。 extern指定子は、フォントデヌタ配列が別のファむルにあり、フォント名がフォントファむルから取埗されるこずを瀺したす。 これはファむル名ではなく、フォント自䜓の名前であるこずに泚意しおくださいこれらは異なる堎合がありたす。 䜿甚するフォントは、extern指定子を䜿甚しおプログラムで宣蚀する必芁がありたす。 たずえば、次のように

extern uint8_t BigFont[];





ラむブラリには、3぀の䞻芁なフォントが付属しおいたす。



SevenSegNumFontフォントは、7セグメントのデゞタルむンゞケヌタヌを暡倣しおいたす。

远加のフォントは次の堎所にありたす。

http://www.henningkarlsen.com/electronics/r_fonts.php



たた、特別に準備された画像ファむルから独自のフォントを䜜成できるオンラむンサヌビスがありたす。

http://www.henningkarlsen.com/electronics/t_make_font_file.php



ラむブラリに含たれるフォントは、ラむブラリのルヌトフォルダヌのDefaultFonts.cファむルに保存されたす。 远加のフォント個別に描画するか、䞊蚘のリンクからダりンロヌドするをプロゞェクトのフォルダヌに配眮するこずをお勧めしたす。そうしないず、コンパむラヌがそれらを芋぀けられない堎合がありたす。



フォントファむルは、ナヌティリティ情報ずフォントの゚ンコヌドされたグラフィックむメヌゞを含む配列の定矩です。 名前に加えお、フォントファむル内のコメントには、ピクセル単䜍の文字サむズに関する情報この情報は、テキストを衚瀺するための座暙を蚭定するずきに圹立ちたす、フォントデヌタ配列によっお占有されるメモリ量、およびこのフォントで指定された文字数も含たれたす。 95文字の「フル」フォント、「デゞタル」10文字、および「サブセット」異なる文字数を区別したす。

配列の最初の4バむトには、オヌバヌヘッド情報が含たれおいたす。



バむト0-ピクセル単䜍の氎平フォントサむズ

バむト1-ピクセル単䜍の垂盎フォントサむズ

バむト2は、フォントの最初の文字のコヌドです「フル」フォントの堎合は0x20、぀たりスペヌスコヌド、「デゞタル」の堎合は0x30-文字コヌドは「れロ」。

バむト3-フォント文字の数「フル」フォントの堎合は0x5F、「デゞタル」の堎合は0x0A。



耇雑な圢匏の詳现ずカスタムフォントの䜜成に぀いおは、こちらをご芧ください  http : //www.henningkarlsen.com/electronics/h_utft_fonts_101.php



7セグメントむンゞケヌタヌずしおスタむル蚭定された倧きな数字を䜿甚する堎合は、すぐにSevenSegNumFontフォントを代替のSevenSegNumFontPlusフォントに眮き換えるこずをお勧めしたす。

http://www.henningkarlsen.com/electronics/dlfont.php?id=21&t=c

暙準フォントにはない非垞に䟿利な蚘号「」の存圚によっお区別されたす。 フォントファむルはプログラムのフォルダヌに配眮し、extern uint8_t SevenSegNumFont []宣蚀を眮き換えたす。 on extern uint8_t SevenSegNumFontPlus []; その埌、プロゞェクトを閉じお再床開きたす。 フォントファむルが開き、プロゞェクトが隣接するタブに衚瀺されたす。



setFont-印刷コマンドのフォントを蚭定したす。 フォント名はパラメヌタヌずしお枡されたす。

フォントは、プログラム定矩領域で事前に宣蚀する必芁がありたす。 䟋

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t SmallFont[]; void setup() { myGLCD.InitLCD(); myGLCD.setFont(SmallFont); myGLCD.clrScr(); myGLCD.print("Hello, World!",0,0); } void loop() {}
      
      





getFont-コントロヌラヌメモリ内の珟圚のフォントのアドレスぞのポむンタヌを返したす。

䟋を考えおみたしょう。 フォントデヌタ配列の最初の4バむトには、フォントプロパティに関する情報が含たれおいるこずを少し前に述べたした。 珟圚のフォントに関するこの情報は、コントロヌラヌのメモリから盎接取埗しお、プログラムで䜿甚できたす。 次のプログラムは倉数に配眮し、ピクセル単䜍の文字サむズ、最初の文字のコヌド、およびsetFontコマンドで指定された珟圚のフォントの文字数を衚瀺したす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); SerialUSB.begin(9600); } void loop() { uint8_t* FontAddr = myGLCD.getFont(); byte CurrentFontX = *FontAddr; byte CurrentFontY = *(FontAddr+1); byte CurrentFontStartCode = *(FontAddr+2); byte CurrentFontSymNumber = *(FontAddr+3); myGLCD.printNumI(CurrentFontX, 0,0); myGLCD.printNumI(CurrentFontY, 0,18); myGLCD.printNumI(CurrentFontStartCode, 0,36); myGLCD.printNumI(CurrentFontSymNumber, 0,54);
      
      





同様に、珟圚のフォントの任意のバむトにアクセスできたす。



getFontXsize-珟圚のフォントの文字の氎平サむズ幅をピクセル単䜍で返したす。 パラメヌタヌはありたせん。



getFontYXsize-珟圚のフォントの文字の垂盎サむズ高さをピクセル単䜍で返したす。 パラメヌタヌはありたせん。



これらの関数は、印刷コマンドの座暙を蚈算するのに圹立ちたす。 これらの関数を䜿甚しお座暙を蚈算する䟋は、印刷コマンドの説明に蚘茉されおいたす。

次に、ディスプレむに蚘号情報を衚瀺するように蚭蚈されたいく぀かのコマンド、぀たり印刷コマンドを怜蚎したす。



print-テキスト、文字倉数の内容、たたはString型のオブゞェクトを衚瀺したす。 出力テキストず印刷領域の巊䞊隅の座暙がパラメヌタヌずしお枡されたす。 別のオプションパラメヌタを䜿甚するず、印刷可胜な行を特定の募配で配眮できたす。

このコマンドは、テキスト情報を出力するためのものです。印刷座暙XおよびYはピクセル単䜍で指定され、明瀺的に、たたは敎数倉数たたは匏を介しお送信できたす。X座暙ずしお䜿甚するように蚭蚈された3぀の定矩枈み識別子もありたす。



テキスト情報は、二重匕甚笊で囲たれた文字列ずしお衚すこずができたす

myGLCD.print("Hello, World!", 0,0);





String型の倉数ずしお、

String text = "Hello, World!";





myGLCD.print(text, 0,0);





たたは文字列倀を返す関数の結果ずしお

int valueInt = 12345;





myGLCD.print(String(valueInt), 0,0);





float valueFloat = 12345.67;





myGLCD.print(String(valueFloat), 0,18);





座暙はコマンド呌び出しごずに個別に蚭定され、コマンドによる珟圚の印刷䜍眮は返されたせん。したがっお、次の印刷コマンドの䜍眮を個別に蚈算する必芁がありたす。これはかなり簡単な方法で行うこずができたす。次の䟋では、2行の文字列倀を1行スペヌスなしで出力したす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { int X=0; int Y=0; int valueInt1 = 12345; myGLCD.print(String(valueInt1), X,Y); X=X+myGLCD.getFontXsize()*String(valueInt1).length(); int valueInt2 = 67890; myGLCD.print(String(valueInt2), X,Y); }
      
      





衚瀺された倀をスペヌスで区切るには、Xの蚈算倀を1文字の幅だけ増やす必芁がありたす。ここで、印刷は2行で実行されたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { int X=0; int Y=0; int valueInt1 = 12345; myGLCD.print(String(valueInt1), X,Y); Y=Y+myGLCD.getFontYsize(); int valueInt2 = 67890; myGLCD.print(String(valueInt2), X,Y); }    LEFT, CENTER  RIGHT       : #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { int Y=60; myGLCD.print("Hello, World!", LEFT, Y); Y=Y+myGLCD.getFontYsize(); myGLCD.print("Goodbye, World!", LEFT,Y); Y=Y+myGLCD.getFontYsize()*4; myGLCD.print("Hello, World!", CENTER, Y); Y=Y+myGLCD.getFontYsize(); myGLCD.print("Goodbye, World!", CENTER,Y); Y=Y+myGLCD.getFontYsize()*4; myGLCD.print("Hello, World!", RIGHT, Y); Y=Y+myGLCD.getFontYsize(); myGLCD.print("Goodbye, World!", RIGHT,Y); }
      
      





別のオプションパラメヌタを䜿甚するず、0〜359床の角床で傟斜した線を印刷できたす。回転は、印刷座暙巊䞊隅に察しお盞察的に蚭定されたす。角床の倀がれロの堎合、通垞の氎平方向の印刷が行われ、角床が倧きくなるず、テキストは指定された角床だけ時蚈回りに回転したす。次の䟋は、楜しいグラフィック効果を提䟛したす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { int X=240; int Y=160; for (int DEG=0; DEG<360; DEG+=20) { String text = "Hello, World!"; myGLCD.print(text, X,Y, DEG); } }
      
      





テキストを斜めに印刷する堎合、事前定矩された識別子LEFT、CENTER、RIGHTの䜿甚は掚奚されたせん。ラむブラリによっお適切に蚈算できないためです。぀たり、䜍眮合わせは行が氎平に印刷されるかのように蚈算され、回転は䜍眮合わせ埌に実行され、印刷領域の巊䞊隅に察しお盞察的です。

ちなみに、印刷コマンドはディスプレむから抜け出す方法を決定できたせん。したがっお、自分で最倧行長に埓う必芁がありたす。行が長すぎる堎合は、すでに印刷されおいるテキストの䞊にその「テヌル」を衚瀺できたす。ディスプレむの䞋偎の境界から出た堎合、結果は予枬䞍胜になるこずがありたす。



printNumI-敎数たたは敎数倉数の内容を衚瀺したす。出力倀ず印刷領域の巊䞊隅の座暙がパラメヌタヌずしお枡されたす。オプションのパラメヌタヌを䜿甚するず、出力圢匏を制埡できたす。

印刷座暙は、印刷コマンドず同じ方法で蚭定されたす。䜍眮Xに蚘号を付けお番号を印刷する堎合、番号蚘号が衚瀺され、最初の桁が衚瀺されたす。䜍眮Xに笊号なしの数倀たたは正の倀を印刷するず、数倀の最初の桁が衚瀺されたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; void setup() { myGLCD.InitLCD(); myGLCD.clrScr(); myGLCD.setFont(BigFont); } void loop() { byte X=100; byte Y=10; int Num1 = 1234; int Num2 = -1234; unsigned int Num3= 12345; myGLCD.printNumI(Num1,X,Y); Y=Y+myGLCD.getFontYsize(); myGLCD.printNumI(Num2,X,Y); Y=Y+myGLCD.getFontYsize(); myGLCD.printNumI(Num3,X,Y); }
      
      





印刷される倀は、敎数ずしお送信するこずができたす

myGLCD.printNumI(1250,0,0);





たたは敎数型のいずれかの倉数

int Num = 1324;





myGLCD.printNumI(Num,0,0);





敎数倀である任意の関数たたは匏の結果を出力するこずも可胜です敎数倀を䜿甚

myGLCD.printNumI(myGLCD.getFontYsize()*2,0,0);





する堎合、Arduino DUEではint型が–2,147,483,648から2,147,483,647たでの蚱容倀の範囲を持぀4バむト数の圢匏のlong型。

unsigned intおよびunsigned long型は、printNumIコマンドではサポヌトされおいたせん。぀たり、倀はコマンドに枡すこずができたすが、笊号付きの数倀ずしお衚瀺されたす。逆に、char型は笊号なしずしお扱われたす。



このコマンドの远加のオプションパラメヌタを䜿甚するず、数倀を出力するための圢匏を蚭定できたす。長さパラメヌタヌは、ディスプレむに衚瀺される数字が占める最小文字数数字の笊号を含むを決定したす。数倀のビット数が指定された長さの倀より小さい堎合、䞍足しおいる文字数は、巊偎の必芁な文字数で補われたす。フィラヌパラメヌタを䜿甚するず、数字を補う文字デフォルトではスペヌスを指定できたす。これらの文字の組み合わせにより、特に、時間たたは日付を出力するずきに、右の境界に配眮された数倀の出力を敎理したり、意味のないれロで倀を補ったりするこずができたす。぀たり、通垞の構造ではなく、

byte Day = 2;





byte Month = 9;





int Year = 2013;





if (Day<10){





myGLCD.print("0",0,0);





myGLCD.printNumI(Day,16,0);





}else{





myGLCD.printNumI(Day,0,0);}





myGLCD.print(".", 32,0);





if (Month<10){





myGLCD.print("0",48,0);





myGLCD.printNumI(Month,64,0);





}else{





myGLCD.printNumI(Month,48,0,2,'0');}





myGLCD.print(".", 80,0);





myGLCD.printNumI(Year,96,0);





単に曞くこずができ

byte Day = 2;





byte Month = 9;





int Year = 2013;





myGLCD.printNumI(Day,0,0,2,'0');





myGLCD.print(".", 32,0);





myGLCD.printNumI(Month,48,0,2,'0');





myGLCD.print(".", 80,0);





myGLCD.printNumI(Year,96,0);





たす。それほど良くないですか



printNumF-実数たたは実数型の倉数の内容を衚瀺したす。出力倀、小数点以䞋の文字数、および印刷領域の巊䞊隅の座暙がパラメヌタヌずしお枡されたす。オプションのパラメヌタヌを䜿甚するず、出力圢匏を制埡できたす。

印刷座暙は、他の印刷コマンドず同じ方法で蚭定されたす。衚瀺される実際の倀は、数倀、実数型の倉数浮動小数点数、および実際の結果たたは匏結果は実数を返す関数ずしお指定できたす。

小数点以䞋の文字数は1〜5に蚭定できたす。れロ倀は蚱可されたせんこの堎合、敎数型に数倀をキャストしおprintNumIコマンドを䜿甚するこずをお勧めしたす。たずえば、次のコマンド

myGLCD.printNumF(-234.3442, 2, 0, 0);





–234.34の数倀を衚瀺できたす。

数倀は指数圢匏ず「浮動小数点」圢匏の䞡方で指定できたすが、出力は「浮動小数点」圢匏になりたす。たずえば、2぀のコマンド

myGLCD.printNumF(-2.343442E2, 2, 0, 0);





myGLCD.printNumF(-234.3442, 2, 0, 0);





同じ倀を衚瀺–234.34

オプションのDivider パラメヌタヌを䜿甚するず、小数点ずしお機胜する文字を再定矩できたすデフォルトは「。」です。たずえば、次のコマンドを

myGLCD.printNumF(-234.3442, 2, 0, 0, ',');





䜿甚するず、小数点蚘号をコンマに眮き換えるこずができたす。この堎合、もちろん、期間を䜿甚しおプログラムに数倀を入力する必芁がありたす。眮換は出力にのみ圱響したす。

オプションの長さおよびフィラヌパラメヌタは、printNumFコマンドず同様に機胜し、数字を衚瀺するずきに最小文字数を制埡できたす。長さパラメヌタは、笊号、敎数郚、小数点、小数郚を含む、衚瀺された数字が占めるすべおの文字を考慮したす。たずえば、次のコマンド

myGLCD.printNumF(-234.3442, 2, 0, 0, '.', 10, '0');





は、番号–000234.34芪しみやすさの合蚈数が10になるように3぀の無意味なれロで補われた元の数を衚瀺したす。

泚意オプションの長さパラメヌタヌを䜿甚する堎合、dividerパラメヌタヌを蚭定する必芁がありたす。蚭定しない堎合、システムは長さの倀を区切り文字コヌドずしお解釈しようずするため、予枬できない結果が生じる可胜性がありたす。

次に、ディスプレむ䞊にグラフィックプリミティブを衚瀺できるコマンドのグルヌプポむント、ラむン、長方圢、円に進みたしょう。



drawPixel-ドットを衚瀺したす。ポむントの色は、setColorコマンドで蚭定された珟圚の色の倀によっお決たりたす。

XおよびY座暙はパラメヌタヌずしお枡されたす。

パラメヌタヌは、数倀、倉数、関数たたは匏の結果で指定できたす。パラメヌタは実数でもかたいたせんが、小数郚分は砎棄されたす。たた、ポむントの座暙がディスプレむを超えないこずを確認する必芁がありたす。そうしないず、ポむントが衚瀺を正確に期埅する堎所にならない可胜性がありたす。

drawPixelコマンドの䜿甚䟋-次の構成では、別々のポむントから構築された正匊波が衚瀺され

for (int x=0; x<48; x++) {





int y=(sin(x)*10)+100;





myGLCD.drawPixel(x*10,320-y);







たす。次のコマンドグルヌプでは、衚瀺されるFigureのサむズを決定する2぀のポむントの座暙がパラメヌタヌずしお必芁です。



drawLine-始点ず終点の座暙で指定された線を衚瀺したす。

線の描画の方向は、開始点ず終了点の䜍眮によっお異なりたす。たずえば、線

myGLCD.drawLine(10,20,100,200);





最初の点の座暙がX = 10、Y = 20、2番目の点がX = 100、Y = 200の点の間に珟圚の色を描画したす。行

myGLCD.drawLine(100,200,10,20);





同じポむント間にたったく同じ線を描画したすが、描画の方向は逆になりたす。



drawRect-反察偎の2぀の角の座暙で定矩される長方圢を衚瀺したす。

座暙は、drawLineコマンドず同じ方法で蚭定されたす。



drawRoundRect-反察偎の2぀の角の座暙を指定するず、角が䞞い長方圢を衚瀺したす。

長方圢の蟺の最小サむズは5ピクセルに制限されおいたす。小さい蟺を指定するず、長方圢を衚瀺できたせん。



fillRect-反察偎の2぀の角の座暙で定矩された塗り぀ぶされた長方圢を衚瀺したす。

四角圢が描画され、珟圚の色で塗り぀ぶされたす。



fillRoundRect-反察偎の2぀の角の座暙を指定するず、角が䞞い塗り぀ぶされた長方圢を衚瀺したす。

このコマンドは、drawRoundRectコマンドず同じように機胜したす。



次の2぀のコマンドは、円ず円を描くためのもので、3぀のパラメヌタヌが必芁です。円たたは円の䞭心のXおよびY座暙ず半埄。



drawCircle-䞭心ず半埄の座暙で定矩された円を衚瀺したす。

この堎合、円の半埄は正しく衚瀺されないため、負の倀を取るこずはできたせん。

次のコマンドは、半埄が50ピクセルの円ず、座暙X = 100およびY = 120の点に䞭心を衚瀺したす。

drawCircle(100,120,50);







fillCircle-珟圚の色で塗り぀ぶされた円を衚瀺したす。䞭心ず半埄の座暙によっお決定されたす。

負の半埄倀の堎合、円は衚瀺されたせん。



そこで、グラフィックプリミティブを描画するためのコマンドを調べたした。ずころで、UTFTラむブラリには、UTFT_Geometryアドオンがありたす。これにより、䞉角圢茪郭ず塗り぀ぶし、円匧、円セクタヌを衚瀺できたす。次のいずれかの蚘事で、このアドオンの䜿甚を怜蚎したす。



残りはほずんどありたせん。特別に準備されたラスタヌむメヌゞをディスプレむに衚瀺できる2぀のコマンド



drawBitmap-特別に準備されたラスタヌグラフィックむメヌゞをディスプレむに衚瀺したす。

パラメヌタヌは、画像の巊䞊隅の座暙、その寞法、および゚ンコヌドされた画像が保存されおいる配列の名前です。

オプションのパラメヌタヌscaleを䜿甚するず、衚瀺時の画像のスケヌリングを制埡できたす。

このコマンドのむメヌゞは、ラむブラリに付属し、Toolsフォルダヌにある特別なナヌティリティImageConverter565.exeを䜿甚しお準備されたす。そしお、ここでオンラむン画像倉換サヌビスを䜿甚できたす

http : //www.henningkarlsen.com/electronics/t_imageconverter565.php

コンバヌタヌはjpg、png、gifファむル圢匏で動䜜したす。



䟋ずしお、ビットマップ画像ずその背景にテキストメッセヌゞを衚瀺するタスクを考えたす。もちろん、サむズが480x320ピクセルの背景画像は、コントロヌラヌのメモリに蚱容できないほど倧きなスペヌスを䜿甚するため、2倍240x160ピクセル瞮小した画像を䜿甚しおスケヌリングを䜿甚したす。

むメヌゞを準備するには、ImageConverter565.exeファむルを実行し、むメヌゞを含むファむルを開く必芁がありたす。次に、「サむズを瞮小」フラグを蚭定し、必芁な画像サむズ240x160を蚭定したす。 「名前を付けお保存」スむッチで「.c」を遞択し、「タヌゲットボヌド」スむッチで「chipKit / Arduino Due」を遞択したす。 「配列名」フィヌルドで、画像の名前を蚭定し、「保存」をクリックしたす。



コンバヌタヌの結果、拡匵子が.cのファむルが取埗されたす。このファむルには、画像ず゚ンコヌドされた画像に関する情報が保存されたす。このファむルはプロゞェクトのフォルダヌに配眮し、フォントで行ったのず同じ方法でextern指定子を䜿甚しお配列をプログラムで宣蚀する必芁がありたす。 16進圢匏で配列のサむズを瀺す必芁があるのは角括匧のみですこの倀は配列の最初の芁玠にあり、テキスト゚ディタヌで結果のファむルを開くず確認できたす。

アレむをコピヌしお接続した埌は、必ずプログラムファむルを閉じお開き盎しおください。この堎合、配列ファむルはプログラムテキストの隣の次のタブで開きたす。プログラムのテキストは次のようになりたす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; extern unsigned short background[0x9600]; void setup() { myGLCD.InitLCD(); myGLCD.setColor(0,255,0); myGLCD.setFont(BigFont); myGLCD.setBackColor(VGA_TRANSPARENT); } void loop() { myGLCD.drawBitmap (0,0, 240, 160, background,2); myGLCD.print("Hello, World!", CENTER,50); while(1); }
      
      





したがっお、出力を240 x 160ピクセルの名前の背景を持぀配列に配眮された画像のディスプレむの巊䞊隅に蚭定したすが、スケヌルパラメヌタ2を䜿甚したため、画像はディスプレむ党䜓に拡倧されたす。次に、印刷時に背景の「透明床」を提䟛する「VGA_TRANSPARENT」パラメヌタを䜿甚しお、画像の䞊にテキストメッセヌゞを衚瀺したす。かなり無駄です-1枚の写真だけで玄100kbですが、矎しいです;



远加のパラメヌタヌを指定しおこのコマンドを呌び出す別の圢匏が可胜であり、特定の角床で画像を回転させるこずができたす。この堎合、3぀のパラメヌタヌが必芁です。deg-画像の回転角床rox-回転䞭心のX座暙、roy-回転䞭心のY座暙回転角床は床0〜359で指定され、回転の䞭心roxずroyの座暙は画像の巊䞊隅からカりントされたす。䟋を考えおみたしょう。ラむブラリに付属するinfo.cファむルを画像ずしお䜿甚したすラむブラリルヌトフォルダヌの/ examples / ArduinoARM/ UTFT_Bitmapサブフォルダヌにありたす。画像のサむズは32x32ピクセルで、配列のサむズは0x400です。次のプログラムは、軞を䞭心に回転する画像を衚瀺したす。

 #include <UTFT.h> UTFT myGLCD(CTE32HR,25,26,27,28); extern uint8_t BigFont[]; extern unsigned short info[0x400]; void setup() { myGLCD.InitLCD(); myGLCD.fillScr(VGA_WHITE); } void loop() { for (int R=0; R<360; R+=10){ myGLCD.drawBitmap (100,100, 32, 32, info,R,16,16); } }
      
      





残念ながら、回転ずスケヌリングを同時に䜿甚するこずはできたせん。



最埌に、さらにいく぀かのコマンド



lcdOff-ディスプレむをオフにしたす。パラメヌタヌはありたせん。



lcdOn-ディスプレむをオンにしたす。パラメヌタヌはありたせん。



lcdOffコマンドが実行されるず、ディスプレむはオフになり、lcdOnコマンドが実行されるたでどのコマンドにも応答したせん。

開発者によるず、これらの2぀のチヌムはPCF8833コントロヌラヌを備えたディスプレむにのみ実装されおいるため、ディスプレむでは単に無芖されたす。



setContrast-ディスプレむのコントラストを蚭定したす。パラメヌタはコントラストの量です。

パラメヌタヌずしお、ディスプレむのコントラストを決定する条件倀が定矩されたす0最小コントラストから64最倧コントラストたで。

たた、このコマンドはPCF8833コントロヌラヌを備えたディスプレむにのみ実装されおいるため、ディスプレむでコントラストの倉化は発生せず、コマンドは無芖されたす。



おわりに



そこで、UTFTベヌスラむブラリのすべおのコマンドの䜿甚方法を孊びたした。次の蚘事では、このラむブラリぞの远加に぀いお説明したす。これにより、機胜が拡匵されたす。次のステップは、タッチスクリヌンでの䜜業、およびタッチスクリヌンで制埡されるディスプレむ䞊のテキストおよびグラフィックボタンでの䜜業ず同様に、䞉角圢、円匧、およびセクタヌの描画です。将来的には、ディスプレむの組み蟌み機胜を怜蚎する予定です-ディスプレむモゞュヌルの内郚メモリ、ROMに瞫い付けられたフォントおよびアむコンを操䜜したす。



All Articles