趣味の開発ノート趣味の開発ノート読者になる趣味の開発ノートITの学習やプログラミング・ノーコードアプリ開発のことなど。IDEで見られるスケッチ例を読解していく。今回は、スケッチ例「Button」を読解して、M5Stackのボタン操作について見ていく。World」のスケッチ例を題材に整理しているのでそちらをご参照ください。M5Stackに書き込んでみる。すると、最初にディスプレイ上に黄色の文字でこのように表示される。この状態で下の3つのボタンをどれか押すと、押したボタンに対応してA〜Cの文字がディスプレイ上にタイプされる。ボタンを長押しすることで一定間隔で同じ文字が連続タイプされる。PCのキーボードを長押ししている時と同じような挙動。真ん中のBボタンを長押し(700ミリ秒≒1秒弱)押すと、画面がリセットされて真っ白になる。この白い画面の時にも、押したボタンを表示したり、再度Bボタン長押しで画面リセットをすることができる。......というのが、ボタン制御のサンプル。スケッチを読むコメントなどは省略している。}}setup()関数内では、M5の初期化やディスプレイへの文字表示などを行なっている。ここは今回は省略する。loop()関数内でボタン操作周りを行なっているので、ポイントを整理していく。C」と名前がついている。M5.BtnCのように呼び出して使う。loop()関数の中を見ていく。ボタンの状態のアップデートM5.update()ボタンの読み取り状態を更新する関数。github.comボタンを扱うには、基本的にはこれをloop()関数の先頭(もしくは末尾)に書く必要がある。試しに実際にM5.update()の一文をloop()関数内に記述せずに書き込むと、ボタンを押してもどれも反応しない状態になった。ボタンの状態によって条件分岐を行うloop関数内では、ボタンの状態によって条件分岐が行われている。}これは、ボタンAが押されたら、画面上に「A」の文字をタイプするボタンBが押されたら、画面上に「B」の文字をタイプするボタンCが押されたら、画面上に「C」の文字をタイプするボタンBが700秒長押しされたら、画面をクリアして白一色にする(再度画面左上から印字をスタートする)というような処理が行われている。(M5.Lcd.print()関数は、前回のprintの続きから行われるので、キーボードでタイプしてPCに出てくる時のような表示になる。)ボタンの状態は条件分岐で判定しているのだけど、ちょっとどう使われているのかわかりづらいので、関数を一つずつ見てみることにする。シンプルに、ボタンAだけを見ていこうと思う。ボタンの押下を感知するだけならM5.BtnA.wasReleased()ボタンAが(押された状態から)離した瞬間に一度だけ1を返す関数。日本語のドキュメントにはwasReleasedがなかった。以下英語のドキュメント。github.com例えば、シンプルにボタンAを押したかどうかを判定したいだけなら、loop関数はこのようなスケッチで良い。}書き込んで試してみると、ボタンAを押すと文字Aがタイプされる。これだと長押しに対応していない。ボタンを話した瞬間に1回だけ、文字Aが表示される。今回のスケッチ例には出てこないけど、こちらのwasPressed()関数も使える。wasReleased()との違いは、ボタンを押した時に検知するか、押したボタンを離した時に検知するかということ。M5.BtnA.wasPressed()ボタンAが押される度に一度だけ1を返す関数。ディレイ時間)ボタンAが引数で指定した時間以上ボタンが押し続けられたら1を返す関数。引数には、長押し時間をミリ秒で指定する。第2引数にはディレイ時間を指定することができるみたい。(ドキュメントには見当たらなかった)github.com先ほど試したloop関数のif条件式をこのようにしてみる。}ボタンAを1秒以上押すと、文字Aがタイプされるスケッチができた。これを書き込んで試してみると、ボタンAを長押しした瞬間に「AAAAA......」と一気に画面いっぱいに文字がタイプされてしまう。これを防ぐために第2引数のディレイ時間を指定することで、長押ししている間は一定間隔で文字Aがタイプされるようになる。}長押しに関しては、こちらのwasReleaseFor()関数も使える。pressedFor()とは、長押ししている途中に検知されるか、長押しから離した瞬間に検知されるか、というちょうど対になっているものかな?M5.BtnA.wasReleaseFor(長押し時間)ボタンAを引数で指定した時間以上押された状態から離した時に1を返す関数。github.comPCのキーボードのような挙動を作るにはこれまでの内容を組み合わせると、スケッチ例のようにPCのキーボードのような挙動を作ることができる。}まとめボタンの制御もなかなか複雑だった。ドキュメントが揃ってなかったりして、うまく整理できなかったかも。読者になる関連記事2023-01-09【UIFlow】M5Stack同士でローカル通信ができるESP-NOWを使ってみたM5Stackシリーズについて学習中。先日は自宅のWi-Fi通信を使い...2023-01-06【UIFlow】M5StickとIFTTTでボタンを押すとLINEに通知する仕組みを作ったM5Stackシリーズについて学習中。時間の経過判定と...M5Stackで電子工作ができるようになりたくて、練習中。mills関数の...M5Stackで電子工作ができるようになりたくて、練習中。(3)リンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!massa_potatoさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。