アラフォーエンジニアの週末

Arduino, M5stackなど趣味で初めた電子工作を中心とした週末の活動・メモを中心にかいていきます。

M5stickCのスイッチを使ってみた

M5stickCにはボタンが3つあります。

回路図や部品配置をみると

ボタンA(正面M5ボタン:GPIO37)、ボタンB(右側面サイドボタン:GPIO39)、そして電源スイッチ(左側面サイドボタン)があります。

なお電源スイッチ6secで電源OFFとなるようです。電源ONの場合は、長押しは不要になります。

f:id:rkblog:20210226191509p:plain

ということで、スイッチを試してみたいともいます。

まずは何も考えずにArduinoの流儀でスイッチを使ったプログラムを作ってみました。

内容はM5の正面SWを押すたびにLEDが点灯するプログラムです。

f:id:rkblog:20210228155158p:plain

SWをしている間はLEDが点灯するというレベル検出になります。

f:id:rkblog:20210228162751p:plain

次は、スイッチを押すたびにLEDの点灯・消灯を切り替えるエッジ検出のプログラムを作ってみます。作成したプログラムは正面M5スイッチを押すとDisplay表示の値がインクリメントされる。また押すたびにLEDの点灯、消灯を切り替える。サイドスイッチを押すと回数表示はリセットされ0になるようにしました。

f:id:rkblog:20210228162322p:plain

f:id:rkblog:20210228162619p:plainf:id:rkblog:20210228162449p:plain

スイッチが押されたときは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するので面倒だな。。。なにか何か良い方法はないかな。。。。今後の宿題にしておこう。