search
LoginSignup
4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Adafruit 1.8" SPI display のライブラリを読む

SPI 接続のLCDを使いたいので、ライブラリ Adafruit_ST7735 のソースコードを読んで使い方を調べてみました。

CからAPIを使いたい的な観点から調査しました。

まとめ

  • ライブラリはC++のクラスとして実装
  • Adafruit_ST7735クラスはAdafruit_GFXの派生クラスとなっており、ST7735特有の処理のみを実装している。
  • Adafruit_GFXから呼ばれるのは fillScreen(),drawPixel(),fillRect(),setRotation(), です。
  • LCDライブラリとしては、点、矩形の描画APIを用意すれば良い。
  • ビットマップ描画、斜め線の描画、フォント描画などは、点描画のAPIを使ってAdafruit_GFXで実装されている。
  • ST7735の描画コマンドは、矩形選択と色設定を使う。

調査対象

APIリスト

  • Adafruit_ST7735クラスはAdafruit_GFXの派生クラス
  • コンストラクタ
    • Adafruit_ST7735(int8_t CS, int8_t RS, int8_t SID, int8_t SCLK, int8_t RST = -1);
    • Adafruit_ST7735(int8_t CS, int8_t RS, int8_t RST = -1);
  • メソッド
    • initR(uint8_t options = INITR_GREENTAB), // for ST7735R
    • setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1),
    • pushColor(uint16_t color),
    • fillScreen(uint16_t color),
    • drawPixel(int16_t x, int16_t y, uint16_t color),
    • drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color),
    • drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color),
    • fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color),
    • setRotation(uint8_t r),
    • invertDisplay(boolean i);
    • uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);

以下で各APIの説明をする。

Adafruit_ST7735()

  • ピンの情報を設定してクラスを生成

initR()

  • 初期化用のコマンドをSPIで送信して初期化する。
  • optionsでLCDコントローラのタイプを指定可能。液晶保護シートに緑のタブが付いていたら、GREENTAB、黒のタブが付いていたらBLACKTABを指定する。

setAddrWindow()

  • x0, y0, x1, y1 で矩形を設定
  • ST7735_CASETコマンドとST7735_RASETで設定
  • Adafruit_GFXからは呼ばれない。

pushColor()

  • setAddrWindow()で指定した後で、その領域を色colorで描画
  • 色の値はColor565()で取得
  • Adafruit_GFXからは呼ばれない。

fillScreen()

  • 画面全体を色colorに描画
  • fillRectを呼んでいる。
void Adafruit_ST7735::fillScreen(uint16_t color) {
  fillRect(0, 0,  _width, _height, color);
}

drawFastVLine

  • 座標 x, y に高さh、色colorの線を描画
  • Adafruit_GFXからは呼ばれない。

drawFastHLine

  • 座標 x,y に幅w、色colorの線を描画
  • Adafruit_GFXからは呼ばれない。

fillRect

  • 座標x0, y0, x1, y1 で色colorの矩形領域を描画

setRotation

  • 画面を回転  0,1,2,3はそれぞれ0, 90, 180, 240度回転

invertDisplay

  • 画像を反転
  • Adafruit_GFXからは呼ばれない。

色の値

  • R, G, Bから16bitの色の値を取得

斜めの線を描画するメソッドdrawLine()、などその他のメソッドはAdafruit_GFXで定義されている。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
4
Help us understand the problem. What are the problem?