酒と薔薇の日々(その2)

つれづれなるままに好きなことだけ求めて生きるINTJ人間

Arduino+TFT液晶でカウントダウンタイマ試作

2018年06月21日 22時43分21秒 | コンピュータ

いやいや、いけません。

ボラのExcelやらんとイケンのに、朝から晩までArduino+TFT一色に染まってしまった。

これだから、禁断の商品は怖い。

消費電力は5V 0.17A ~ 0.2A 程度

グラフィックの速度に期待を持ってはいけません。

PC8801以下の速度です。PC8001並みかな。

しょうがないので、カウントダウンタイマーを作ってみた。

どんなものか少し判ったので、少しは乾きが収まったように感じる。

 少し製品が判ってきたので、Excel勉強に戻ってTFTは構想の身に留めましょう。

 

文字表示の際の注意点は

1 tft.setCursor(x,y); は、任意の位置に文字を書き込める。x,yは多分左の端

2 tft.setRotation(rotation); rotation = 3 で 画面横置き(左側がUSBソケット)になる

3 文字を同じ位置に上書きしても、前の文字は消えない。

  そのまま重ね文字になるので、背景色で同じ文字を書いて消すことになる(FillRectでもOK)

4 内臓フォントはプロポーショナルなので、空白で位置合わせをしようとしてもうまくいかない

5 タイマー再描画の際はちらつきが生じる

6 視認性の良いフォントサイズは「2」

7 書き込みのタイミングが悪いと失敗するので、画面に真っ赤な失敗文字が出てもメゲずに再度「Ctrl+U」を押そう

8 画面消去(tft.fillScreen)はスダレが下りるような速度

原因が分らんのだが、ある時期、28カウント目辺りで、必ずシステムリセットがかかる状況が続いた。

PCのUSBから電源を取っていたが、電源電圧低下でもあったのか?

いつの間にか直っていた・・・

何か信用でけん。Lチカでも同じような症状があったよなあ。

あれれ、リセットが発生するのは同じ30秒前後だ!

電池駆動にして一晩動かしたが、朝までリセットはかかっていなかった。

どうも、パソコンとの相性には違いない。 PCからの電源供給不足だったようだ。

電源を直接取れば安定するかとUSB接続と同時にDCアダプタへ12Vを挿したら、暫くすると基盤が大加熱状態

危うく壊すところでした orz

こいつはサインスマートの純正基盤なのだっ!高かったんだぞー!

 

タイマカウント=0でターミネータのT100画像を表示させようと、BMPを240*320 24bitで作り4GのマイクロSDへ入れるもエラーで表示不能。

画像作成がJtrimでイカンのかとWindows純正のpaint(使いにくいよなあ)で作るも同じ。

CDサンプルに入っていた画像も良く見ると、4枚中虎と花しか表示されていないし、途中で表示が止まっている。

何か怪しい・・・

また眠れない夜が続きそう。

だが、むりやり午前1時過ぎに就寝した。

あ~、買うんじゃなかった。 

----------------------------

//    スクリーン 縦横設定、背景色設定
//    フォントサイズと色設定
//    注意点:文字を同じ位置に背景色で書かないと前の文字が消えません
//
//          2018/06/21

#include <Elegoo_GFX.h>    // Core graphics library
#include <Elegoo_TFTLCD.h> // Hardware-specific library

#define identifier 0x9341  // my board ID

#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin

#define    BLACK   0x0000
#define    BLUE    0x001F
#define    RED     0xF800
#define    GREEN   0x07E0
#define    CYAN    0x07FF
#define    MAGENTA 0xF81F
#define    YELLOW  0xFFE0
#define    WHITE   0xFFFF

#define rotation 3              // 画面横置き(左USBソケット)
#define backColor WHITE   // 画面背景色

Elegoo_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);  // オブジェクト生成

void setup(void) {
  //Serial.begin(9600);
  tft.begin(identifier);          //  watashino TFTのICチップ型
  tft.setRotation(rotation);  // 画面の向き設定
}
//-------- 同じ位置に数字を表示し 1秒で消去する ----------
void dspCount(int cnt){
#define  x 120                //  表示位置
#define  y 120
  tft.setTextColor(RED);  // 表示文字色
  tft.setCursor(x,y);
  tft.println(cnt);            // 数字を表示
  delay(1000);
  tft.setCursor(x,y);
  tft.setTextColor(backColor);  // 同じ位置にバックカラーで同じ文字を描画して消す
  tft.println(cnt);                    // そうしないと重ね書きになる
}
//-------- main ----------
void loop(void) {
  int i;
  tft.fillScreen(backColor);     // 画面初期化
  tft.setTextSize(2);             // FontSize
  tft.setTextColor(BLUE);      // 文字色
  tft.setCursor(20,50);         // 画面は320*240
  tft.println("*** Count Down Timer ***");
  tft.setTextSize(1);
  tft.setCursor(55,220);
  tft.println("my first TFT program byx.xxxxxx");       // CopyRightを表示
  tft.setCursor(133,230);                                         // fontがpropなのでspaceで位置合わせ出来ない
  tft.print  ("2018/06/21");
 
  tft.setTextSize(6);
  for (i=999; i>=0; i--){
    dspCount(i);                // 文字表示
  }
  tft.fillScreen(YELLOW);  // 画面初期化
  tft.setTextSize(2);
  tft.setTextColor(RED);  // 表示文字色
  tft.setCursor(80,120);
  tft.println("Terminated ....");       // 終了
  delay(3000);
  tft.fillScreen(BLACK);  // 画面消去
  delay(3000);
}

この記事についてブログを書く
« ArduinoにカラーTFT液晶を付... | トップ | TFT液晶のBMPサンプルが一部... »