Arduino入門

2. デバイス&サンプル

5. 拡張モジュール&サンプル

アクセサリー

6. アプリケーション

Unit DigiClock Arduino チュートリアル

1. 準備

2. 注意事項

ピン互換性
ホストデバイスごとにピン構成が異なるため、M5Stack はピン互換性表を提供しています。実際のピン接続を確認し、必要に応じてサンプルプログラムを変更してください。

3. サンプルプログラム

  • このチュートリアルでは、CoreS3 をホストデバイスとして Unit DigiClock を使用します。Unit DigiClock は I2C 通信を使用し、デフォルトアドレスは 0x30 です。CoreS3 の Port A に接続した場合、対応するピンは G2 (SDA) と G1 (SCL) です。
cpp
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
#include <M5Unified.h>
#include <M5UNIT_DIGI_CLOCK.h>

constexpr uint8_t DIGI_ADDRESS = M5UNIT_DIGI_CLOCK_DEFAULT_ADDR;
constexpr uint8_t BRIGHTNESS   = 8;
constexpr uint16_t UI_BG       = 0x1082;
constexpr uint16_t UI_PANEL    = 0x2104;
constexpr uint16_t UI_HEADER   = 0x0349;
constexpr uint16_t UI_MUTED    = 0xBDF7;

M5UNIT_DIGI_CLOCK digiClock;
M5Canvas canvas(&M5.Display);
uint32_t last_update = 0;
uint16_t minute_value = 0;

void drawCard(int16_t x, const char* label, const char* value, uint16_t value_color)
{
    canvas.fillRoundRect(x, 148, 142, 50, 5, UI_PANEL);
    canvas.drawRoundRect(x, 148, 142, 50, 5, UI_MUTED);
    canvas.setTextDatum(textdatum_t::middle_left);
    canvas.setFont(&fonts::Font2);
    canvas.setTextSize(1);
    canvas.setTextColor(UI_MUTED, UI_PANEL);
    canvas.drawString(label, x + 10, 162);
    canvas.setTextColor(value_color, UI_PANEL);
    canvas.drawString(value, x + 10, 183);
}

void drawStatus(const char* value)
{
    char brightness[8] = {};
    snprintf(brightness, sizeof(brightness), "%u / 8",
             static_cast<unsigned>(BRIGHTNESS));

    canvas.fillScreen(UI_BG);
    canvas.fillRect(0, 0, 320, 42, UI_HEADER);
    canvas.setTextDatum(textdatum_t::middle_center);
    canvas.setFont(&fonts::Font4);
    canvas.setTextSize(1);
    canvas.setTextColor(TFT_WHITE, UI_HEADER);
    canvas.drawString("UNIT DIGICLOCK", 160, 16);
    canvas.setFont(&fonts::Font2);
    canvas.setTextColor(UI_MUTED, UI_HEADER);
    canvas.drawString("DIGITAL TIME  /  STATUS", 160, 33);

    canvas.fillRoundRect(12, 54, 296, 78, 6, UI_PANEL);
    canvas.drawRoundRect(12, 54, 296, 78, 6, TFT_CYAN);
    canvas.setTextColor(UI_MUTED, UI_PANEL);
    canvas.drawString("DISPLAY VALUE", 160, 70);
    canvas.setFont(&fonts::Font4);
    canvas.setTextColor(TFT_CYAN, UI_PANEL);
    canvas.drawString(value, 160, 101);

    drawCard(12, "MODE", "CLOCK", TFT_WHITE);
    drawCard(166, "BRIGHTNESS", brightness, TFT_ORANGE);

    canvas.fillRect(0, 214, 320, 26, UI_HEADER);
    canvas.setFont(&fonts::Font2);
    canvas.setTextColor(TFT_WHITE, UI_HEADER);
    canvas.drawString("RUNNING  |  UPDATE EVERY 1 s", 160, 227);
    canvas.pushSprite(0, 0);
}

void setup()
{
    auto cfg = M5.config();
    M5.begin(cfg);
    Serial.begin(115200);
    canvas.setColorDepth(16);
    canvas.createSprite(320, 240);

    const int sda = M5.getPin(m5::pin_name_t::port_a_sda);
    const int scl = M5.getPin(m5::pin_name_t::port_a_scl);
    if (!digiClock.begin(&Wire, sda, scl, DIGI_ADDRESS)) {
        drawStatus("----");
        while (true) {
            delay(1000);
        }
    }
    digiClock.setBrightness(BRIGHTNESS);
    char blank[] = "----";
    digiClock.setString(blank);
    drawStatus("----");
}

void loop()
{
    if (millis() - last_update < 1000) {
        return;
    }
    last_update = millis();

    char value[6] = {};
    snprintf(value, sizeof(value), "%02u:%02u",
             static_cast<unsigned>(minute_value / 60),
             static_cast<unsigned>(minute_value % 60));
    digiClock.setString(value);
    Serial.printf("DigiClock: %s\n", value);
    drawStatus(value);
    minute_value = (minute_value + 1) % (24 * 60);
}

4. プログラムのコンパイルと書き込み

  • 上記のサンプルプログラムをプロジェクトのコード欄にコピーして貼り付け、デバイスのポートを選択します(詳細はプログラムのコンパイルと書き込みを参照してください)。Arduino IDE の左上にあるコンパイルと書き込みボタンをクリックし、プログラムのコンパイルとデバイスへの書き込みが完了するまで待ちます。

5. デジタル表示

  • プログラムを起動すると、Unit DigiClock のデジタル表示が 1 秒ごとに更新されます。ホストディスプレイとシリアルモニターには、Unit に送信されたデータが同期して表示されます。
Page Tools
PDF
On This Page