2016/8/22

様々なスイッチ入力プログラム

どうも、クラゲです。
今回はkonashi搭載のスイッチ入力の様々な使い方とLEDを連携させたプログラムを作ります!
基本的には前回と前々回の応用になりますので、サクサクっと解説します。

【 大まかな流れ 】

  • 押している間だけ全点灯
  • 点灯・消灯の切り替え
  • 押された数をカウントして点灯

押している間だけ全点灯

前回と前々回の組み合わせで、スイッチが押されたら全点灯するという制御が出来ますね。
ただ、スイッチが押されていない時には全消灯することも必要です。
では早速ソースコードです

※※※ jsdo.itは 2019/10/31 を持ちまして終了いたしました。※※※

LEDを消灯するには出力をLOW(つまり0V)に設定する必要があります。具体的にはLED2を消灯させるには次のように記述します。
"k.digitalWrite(k.LED2, k.LOW);"
他のLED端子も同じように書けば、全消灯になります。

点灯・消灯の切り替え

スイッチをカチッと押して離すところまでを1回として、全点灯と全消灯を切り替えます。
先ほどの応用で、ほぼソフトウェアのアルゴリズムの話になります。
スイッチがONからOFFに変化したときだけ注目すれば良いことと、そのときに現状のLEDの点灯/消灯状態と逆にするというのがポイントです。
led_statusというグローバール変数を設けて、LEDの点灯/消灯状態を管理しています。

ソースコードです。

※※※ jsdo.itは 2019/10/31 を持ちまして終了いたしました。※※※

何度かカチカチ押してみると、稀に反応がおかしいときがあります。
1回押しただけなのに、2回押されたような反応です。この現象をチャタリングと言います。
この不具合はハードウェアもしくはソフトウェアで対策できますが、今回は省略します。

押された数をカウントして点灯

押した回数に応じてLEDを順々に点灯していきます。全点灯までいったら、全消灯に戻ります
基本的には先ほどのプログラムのちょい変です。
ではソースです。

※※※ jsdo.itは 2019/10/31 を持ちまして終了いたしました。※※※

スイッチを押すたびにカウンター値が増加します。
"sw_counter%5"は sw_counterを5で割ったときの余りを意味します。なので、0,1,2,3,4,0,1,2,3,4,0・・・というのをずっと繰り返します。

いかがでしたでしょうか?
スイッチ1つであっても工夫すれば、押下中のときの動作、短押しのときの動作、押した回数に応じた動作など色々な使い方が出来ますね。