M5シリーズには本体にボタンが搭載されています。
機種によってボタンの数は異なりますが基本的な使用方法は同じです。
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」については以下のリンクで詳しく紹介しています。
以下のコードを「コピペ」して「ボタン操作コマンド()」部を変更してから書込みを行い、どのような動きになるかを確認してみましょう。
※下コード(黒枠)内の右上角にある小さなアイコンのクリックでコピーできます。
#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回だけ実行したい場合は便利なコマンドです。
「if文」については以下のリンクで詳しく紹介しています。
コメント