M5stickCのスイッチを使ってみた
M5stickCにはボタンが3つあります。
回路図や部品配置をみると
ボタンA(正面M5ボタン:GPIO37)、ボタンB(右側面サイドボタン:GPIO39)、そして電源スイッチ(左側面サイドボタン)があります。
なお電源スイッチ6secで電源OFFとなるようです。電源ONの場合は、長押しは不要になります。
ということで、スイッチを試してみたいともいます。
まずは何も考えずにArduinoの流儀でスイッチを使ったプログラムを作ってみました。
内容はM5の正面SWを押すたびにLEDが点灯するプログラムです。
SWをしている間はLEDが点灯するというレベル検出になります。
次は、スイッチを押すたびにLEDの点灯・消灯を切り替えるエッジ検出のプログラムを作ってみます。作成したプログラムは正面M5スイッチを押すとDisplay表示の値がインクリメントされる。また押すたびにLEDの点灯、消灯を切り替える。サイドスイッチを押すと回数表示はリセットされ0になるようにしました。
スイッチが押されたときはHigh→LOWになるので、new_stateとpast_stateを用いて、
past_state==1 && new_state== 0の時にスイッチが押されたことを判別する形にしました。なお、チャタリングが大きい場合は、数msec周期のサンプリングでSWの状態を取得し一致する回数を2,3回続いた(例:1,1,1→0,0,0)場合にスイッチが押されたと決定させチャタリングを除去 を用いる必要がありますが、特にいれなくても安定して動作はがされていたので、おそらくハードウェアの方でRC回路の対策などが入っているかもしれません。
あとスイッチのプログラムをつくっていて思ったこと。スイッチ読み込み処理をメインのループにいれるより、タイマー割り込みでやらせたいなと。。。でもタイマー割り込みどうやるのか調べないと。。。
あとリセットさせるためには、毎回電源SWをOFF・ONするので面倒だな。。。なにか何か良い方法はないかな。。。。今後の宿題にしておこう。