M5Stack 本体ボタンの使い方、ボタン操作関数一覧(Arduinoプログラミング)

Arduinoコマンド:本体ボタンの使い方Arduinoコマンド
スポンサーリンク

M5シリーズには本体にボタンが搭載されています。
機種によってボタンの数は異なりますが基本的な使用方法は同じです。

1.ボタン操作プログラム(関数)一覧

ボタンを使用するために「ヘッダー」と「初期設定」に書かなければいけないことは無いので省略して、「メイン」部分にボタンを操作するプログラムだけを一覧で以下に記入しました。
必要な部分だけコピーして使用してください。

// メイン -------------------------------------------------
void loop() {
  // 本体のボタン状態更新 ※必ず最初に記入が必要
    M5.update();

  // 1.ボタンが押されていれば「1」になる
  M5.Btn.isPressed()         //押されてる間ずっと「1」

  // 2.ボタンが離されていれば「1」になる
  M5.Btn.isReleased()        //離されてる間ずっと「1」

  // 3.実行された時にボタンが押されていれば「1」になる
  M5.Btn.wasPressed()        //押したままだと次の実行で「0」に戻る

  // 4.実行された時にボタンが離されていれば「1」になる
  M5.Btn.wasReleased()       //離したままだと次の実行で「0」に戻る

  // 5.(数値ms)以上ボタンが押されていれば「1」になる。
  M5.Btn.pressedFor(1000)    //押しつづけてる間ずっと「1」のまま

  // 6.(数値ms)以上ボタンが離されていれば「1」になる
  M5.Btn.releasedFor(1000)   //離したままだとずっと「1」のまま

  // 7.(数値ms)以上ボタンが押された後に離されていれば「1」になる
  M5.Btn.wasReleasefor(1000) //離したままだと次の実行で「0」に戻る

  // 8.ボタンの状態が変化するまでにかかった時間を返します
  M5.Btn.lastChange()        //millis()関数の差分ms
}

4行目の「M5.update();」は必ず記入が必要です。

・メインループの最初に実行してボタンの状態を取得するプログラム
  M5.update();

まず「M5.update();」でボタンの状態を取得してからメインのプログラムを実行していきます。
このため、これを記入しないと本体のボタンは機能しませんので必ず記入しましょう。


6行目以降の1~8は使用目的に応じて選択して使用してください。

・ボタンの操作によって状態が変化するプログラム
  M5 . ボタン名 . ボタン操作コマンド ()
ボタン名:使用するボタン名を書きます。機種ごとに異なります。
 「M5Stack」は「BtnA」(左)、「BtnB」(中央)、「BtnC」(右)
 「M5StickC/M5StickC Plus」は「BtnA」(正面)、「BtnB」(右側面)
 「ATOM LITE」は「Btn」(正面)のみ
ボタン操作コマンド ():実行された時のボタンの状態で実行結果が異なります。
  ※詳細は上記コードのコメント部分で確認してみてください。

2.「Lチカ」プログラムで動作確認してみよう(ATOM LITE使用)

マイコンボード「ATOM LITE」を使用した「Lチカ」プログラムでボタン動作の確認をしてみましょう。
「ATOM LITE」については以下のリンクで詳しく紹介しています。

超小型で高機能!プログラミング初心者におすすめ「ATOM LITE」
マイコンボードはRaspberry Pi、Arduino、M5Stack等がありますが、一通りやってみてそれぞれの良さはあるものの「最初に何を?」と聞かれたらATOM LITEが一番お手軽♪プログラミング初心者におすすめ
プログラミング初心者におすすめ「ATOM LITE」の初期設定
Platform IOを使用した ATOM LITE の初期設定です。ファイルを作成、必要なライブラリの準備、初期設定方法を紹介。実際に「Lチカ」プログラムを「コピペ」で書き込み動作確認まで行います。

以下のコードを「コピペ」して「ボタン操作コマンド()」部を変更してから書込みを行い、どのような動きになるかを確認してみましょう。

※下コード(黒枠)内の右上角にある小さなアイコンのクリックでコピーできます。

#include <M5Atom.h>    // Atomのヘッダファイルを準備

// FastLEDライブラリの設定(CRGB構造体)
CRGB dispColor(uint8_t r, uint8_t g, uint8_t b) {
  return (CRGB)((r << 16) | (g << 8) | b);
}
// 初期設定 -----------------------------------------------
void setup() {
  // 本体初期化(UART無効, I2C無効, LED有効)
  M5.begin(false, false, true);
  // LED全消灯(赤, 緑, 青)
  M5.dis.drawpix(0, dispColor(0, 0, 0));
}
// メイン -------------------------------------------------
void loop() {
  M5.update();  // 本体のボタン状態更新

  if (M5.Btn.isPressed()) {         // ボタンが押されていれば
    M5.dis.drawpix(0, dispColor(0, 0, 255));  // LED(指定色)
  } else {                          // ボタンが押されてなければ
    M5.dis.drawpix(0, dispColor(20, 20, 20)); // LED(白)
  }
  delay(100);   //100ms待機
}

18行目の「ボタン操作コマンド()」は「isPressed()」ですが「wasPressed()」に変更すると、ボタンを押した時に一瞬だけ青色になり、すぐに白色に戻ってしまいます。
これは「isPressed()」は押してる間ずっと「1」ですが「wasPressed()」は押したままでもメインループの繰り返しで次に実行された時には「0」に戻ってしまうためです。
今回の用途では使えませんが押した瞬間1回だけ実行したい場合は便利なコマンドです。

他のコマンドもどのような動きになるか確認してみてください。
「どう使い分けるの?」「違いが判らない」ってなるかもしれませんが、使っているうちに「こういう時に使うのか」「これ便利」ってなる時が来ます。
今は「ボタンを操作するだけでいろんなコマンドがあるんだな~」ぐらいで良いのでボタン操作に迷ったら、またこちらで確認してみてください。
ここでは「C言語」の「if文」が登場しています。
「if文」は条件分岐に使用され「if(条件){ }」のように書かれ、カッコ内の条件が「1(0以外)」の時にその次のプログラムが実行されるものです。

「if文」については以下のリンクで詳しく紹介しています。

動かして学ぶC言語「if文(条件分岐)」の使い方を基本から詳しく紹介
「C言語」の「if文」について紹介します。「if文」は条件によって実行するプログラムを分岐させたい時に使用します。 基本の書き方や使い方を「Lチカ」プログラムで実際に動かしながら楽しく学びましょう♪

コメント

タイトルとURLをコピーしました