M5UnifiedのButtonクラスについて説明します。
サポートしているボタン
M5Unifiedでは、以下の の5つボタンをサポートしています。
- BtnA
- BtnB
- BtnC
- BtnPWR
- BtnEXT
M5Stackシリーズの各機種でのボタンの配置は、以下の通りです。
※ CoreS3とToughはBtnPWRのみです。
各モデルで使用できるボタンは以下の通りです。ここからの情報です。
Device | BtnA | BtnB | BtnC | BtnPWR | BtnEXT |
---|---|---|---|---|---|
M5Stack Basic/Gray/Fire | GPIO39 | GPIO38 | GPIO37 | – | – |
M5Stack Core2 | TouchA | TouchB | TouchC | – | |
M5Stick C/CPlus | GPIO39 | GPIO37 | – | AXP192 | – |
M5Stack CoreInk | GPIO37(Up) | GPIO38(Press) | GPIO39(Down) | GPIO27 | GPIO5 (*1) |
M5Paper | GPIO37(Up) | GPIO38(Press) | GPIO39(Down) | – | – |
M5Station | GPIO37 | GPIO38 | GPIO39 | AXP192 | – |
M5Tough | – | – | – | AXP192 | – |
M5Atom/M5StampPico | GPIO39 | – | – | – | – |
M5StampC3 | GPIO3 | – | – | – | – |
M5StacmC3U | GPIO9 | – | – | – | – |
サンプルコード
M5Unifiedハンズオンにあるボタンの使用方法についてのサンプルコードです。
- サンプル Button1.cpp
- Button1.cppは、ボタンAの操作状態を、画面とシリアルモニタに表示します。
- サンプル Button2.cpp
- 次に進む・前に戻る・ボリュームを上げる・下げる という、つの操作を想定したサンプルです。ボタンAのみで異なる動作を試すことができます。。
- 1回クリック = 次に進む
- 2回クリック = 前に戻る
- 長押し = ボリュームを上げる
- クリック後すぐ長押し = ボリュームを下げる
- 次に進む・前に戻る・ボリュームを上げる・下げる という、つの操作を想定したサンプルです。ボタンAのみで異なる動作を試すことができます。。
メンバー関数
Buttonクラスのメンバー関数の一覧です。
メンバー関数 | プロトタイプ宣言 | 説明 |
---|---|---|
wasClicked | bool wasClicked(void); | wasClickedは押して500ミリ秒以内に離した瞬間に true を返します。 |
wasHold | bool wasHold(void); | wasHoldは500ミリ秒間ボタンを押し続けた瞬間に true を返します。 ※ 500ミリ秒に達した瞬間のみ true を返し、その後は false を返します。 |
wasSingleClicked | bool wasSingleClicked(void); | 500ミリ秒以内の短押しを一度だけした後、離した状態のまま500ミリ秒以上経過した瞬間にtrueを返します。 |
wasDoubleClicked | bool wasDoubleClicked(void); | 500ミリ秒以内の短押しを2回連続した後、離した状態のまま500ミリ秒以上経過した瞬間にtrueを返します。 |
wasDecideClickCount | bool wasDecideClickCount(void); | 500ミリ秒以内の短押しを1回~数回した後、離した状態のまま500ミリ秒以上経過した瞬間にtrueを返します。 |
getClickCount | std::uint8_t getClickCount(void); | 500ミリ秒以内の短押しが何回続いたかを返します。 wasDecideClickCountが true の時に取得すると、確定した回数が得られます。 回数情報は、500ミリ秒以上離した時や、長押しを終えた時に0に戻ります。 |
isHolding | bool isHolding(void); | 500ミリ秒以上押し続けた後から離す瞬間までの間 true を返します。 ※ 500ミリ秒に達するまでは、false のままとなります。 ※クリック回数が1回でも複数回でも反応します。 |
wasChangePressed | bool wasChangePressed(void); | キーの状態が変化したかどうかを確認します。 |
isPressed | bool isPressed(void); | ボタンを押している時は常に true を返します。 |
isReleased | bool isReleased(void); | ボタンを離している時は常に true を返します。 |
wasPressed | bool wasPressed(void); | ボタンを押した瞬間にのみ true を返します。 |
wasReleased | bool wasReleased(void); | ボタンを離した瞬間にのみ true を返します。 |
wasReleasedAfterHold | bool wasReleasedAfterHold(void); | 500ミリ秒以上ボタンを押した後、離した瞬間にtrueを返します。 ※ 500ミリ秒以内に離した場合は false のままとなります。 |
wasReleaseFor | bool wasReleaseFor(std::uint32_t ms); | 指定されたタイムアウト時間を超えてボタンが押されたかどうかを判断し、ボタンを放した後にtrueを返します。 |
setDebounceThresh | void setDebounceThresh(std::uint32_t msec); | チャタリング防止用のDebounceの判定の時間(初期値10ms)を変更します。 |
setHoldThresh | void setHoldThresh(std::uint32_t msec); | ボタンの長押し判定の時間 (初期値500ms) を変更します。 |
setRawState | void setRawState(std::uint32_t msec, bool press); | キー状態を設定します。 |
setState | void setState(std::uint32_t msec, button_state_t state); | キー状態を設定します。 |
getState | button_state_t getState(void); | キー状態を取得します。 |
lastChange | std::uint32_t lastChange(void); | 最後にステータスが更新された時刻を取得します。 |
getDebounceThresh | std::uint32_t getDebounceThresh(void); | Debounceの判定の時間 (初期値10ms) を取得します。 |
getHoldThresh | std::uint32_t getHoldThresh(void); | 現在のボタンの長押しの時間の設定値(初期値500ms)を取得します。 |
getUpdateMsec | std::uint32_t getUpdateMsec(void); | 最後にステータスチェックが実行された時刻を取得します。 |
以下の、M5Unifiedハンズオンの説明の中にボタンの動作についての詳細な説明がありますので参考にしてください。
- M5Unifiedハンズオンのスライドです。
M5Unifiedハンズオン
M5Unifiedハンズオン M5Stackシリーズ共通ライブラリ“M5Unified” を試してみよう! 2024/2/10 らびやん
- 上記スライドに+αの説明があります。
M5Unifiedハンズオン
M5Unifiedハンズオン M5Stackシリーズ共通ライブラリ“M5Unified” を試してみよう! 2024/2/10 らびやん
- M5UnifiedハンズオンのYouTube動画です。
参考URL
以下、参考となるWebページです。