Arduino入門

2. デバイス&サンプル

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

アクセサリー

6. アプリケーション

CoreMatrix Button ボタン

CoreMatrix のボタン入力関連 API とサンプルプログラムです。

注意事項
使用時はメインループ内に M5.update() 関数を含めて状態更新を読み取り、できるだけブロッキングを減らしてください。そうしないと、ボタン状態の変化を適切なタイミングで取得できない可能性があります。

サンプルプログラム

コンパイル要件

  • M5Stack ボードマネージャーのバージョン >= 3.3.10-a
  • 開発ボードの選択 = M5CoreMatrix
  • M5Unified ライブラリのバージョン >= 0.2.29
  • M5GFX ライブラリのバージョン >= 0.2.36

KEY1、KEY2、KEY3 はそれぞれ M5PM1 の G0、G1、G2 に接続され、プルアップ抵抗を介して 3V3_L1 に接続されています。押下時は Low になります。M5Unified は 3 つのボタンを M5.BtnA、M5.BtnB、M5.BtnC にマッピングします。

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
#include <M5Unified.h>

static void drawButtons(const bool pressed[3])
{
  M5.Display.startWrite();
  M5.Display.fillScreen(TFT_BLACK);

  for (int i = 0; i < 3; ++i) {
    const int x = 1 + i * 5;
    M5.Display.drawRect(x, 3, 4, 10, TFT_WHITE);
    if (pressed[i]) {
      M5.Display.fillRect(x + 1, 4, 2, 8, TFT_WHITE);
    }
  }

  M5.Display.endWrite();
  M5.Display.display();
}

void setup()
{
  auto cfg = M5.config();
  cfg.serial_baudrate = 115200;
  M5.begin(cfg);

  M5.Display.setColorDepth(8);
  M5.Display.setRotation(1);
  M5.Display.setBrightness(128);

  const bool pressed[3] = {false, false, false};
  drawButtons(pressed);
}

void loop()
{
  M5.update();

  const bool pressed[3] = {
    M5.BtnA.isPressed(),
    M5.BtnB.isPressed(),
    M5.BtnC.isPressed(),
  };

  static bool lastPressed[3] = {false, false, false};
  bool changed = false;
  for (int i = 0; i < 3; ++i) {
    if (pressed[i] != lastPressed[i]) {
      changed = true;
      lastPressed[i] = pressed[i];
    }
  }
  if (changed) {
    drawButtons(pressed);
  }

  if (M5.BtnA.wasPressed()) Serial.println("KEY1 pressed");
  if (M5.BtnB.wasPressed()) Serial.println("KEY2 pressed");
  if (M5.BtnC.wasPressed()) Serial.println("KEY3 pressed");

  if (M5.BtnA.wasClicked()) Serial.println("KEY1 clicked");
  if (M5.BtnB.wasClicked()) Serial.println("KEY2 clicked");
  if (M5.BtnC.wasClicked()) Serial.println("KEY3 clicked");

  delay(10);
}

ドットマトリクスには KEY1、KEY2、KEY3 に対応する 3 つの空心(中抜き)四角形が表示されます。キーを押している間は対応する四角形が塗りつぶされ、シリアルモニターには押下イベントとクリックイベントが出力されます。

API

CoreMatrix のボタン部分では、M5Unified ライブラリの Button_Class を使用しています。ボタン関連 API の詳細は以下のドキュメントを参照してください。

Page Tools
PDF
On This Page