ハードシーケンサ開発。(その5:ディスプレイ表示のAPI確認)

API確認

文字だけでもいいんだけど、他になにかできるかを確認する。

描画については、固定FPSではなく処理に依存して更新頻度が変化する可変FPSを想定して作る必要がある。
つまり、スケジュールが確定していることを前提にした描画ではないということ。

また、字だけではなく枠線等も引ければ活用場面は広がるため、これを確認する。

参考:
u8g2reference · olikraus/u8g2 Wiki (github.com)

ソースコード


#include <U8g2lib.h>;

// RaspberryPiPicoに2.23インチのWaveshare製OLEDを装着して確認。
// https://www.switch-science.com/catalog/7329/
U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI u8g2(U8G2_R0, /* clock=*/ 10, /* data=*/ 11, /* cs=*/ 9, /* dc=*/ 8, /* reset=*/ 12);

void setup(void) {
    u8g2.begin(); // OLEDの初期化
    u8g2.setFlipMode(0); // 画面の向きを設定、数字を変えると向きが変わる
}

int i =0;
int cnt=0;
void loop(void) {
    int dv=cnt%4;//0,1,2,3
    int dvx=dv%2;//0,1,0,1
    int dvy=(dv > 1)?1:0;//0,0,1,1
    u8g2.clearBuffer(); // バッファのクリア
    u8g2.setFont(u8g2_font_ncenB08_tr); // フォント設定

    //位置を指定後、数値を描画
    u8g2.setCursor(0, 10);
    u8g2.print(i);
    u8g2.drawStr(0, 20, "MachiaWorks "); // バッファに文字列を格納
    u8g2.drawStr(0, 30, "2022/09/01 @"); // バッファに文字列を格納
    u8g2.drawBox(80+dvx*17, 0+dvy*16, 16, 16); // 矩形を描画
    u8g2.sendBuffer(); // バッファの内容で画面を更新
    delay(1000);//1秒待機
    i=millis();//表示のための数値更新(本来は起動後経過秒数の取得関数)
    cnt++;
}