戻る

43 ボタンを押した回数で動作を変える

回路かいろ

21番のプログラム例と回路は同じです。

Arduino と抵抗(1kΩ茶黒赤金, 1kΩから10kΩ(茶黒橙金)ぐらいならよい)とスイッチを用意します。図のスイッチはタクトスイッチです。回路図のように Arduinoの2番ピンとスイッチの片方の足、抵抗の片方の足の3つをつなぎます。 スイッチの反対の足はグラウンド(GND)へ、抵抗の反対の足は5Vへつなぎます。 スイッチの向きを90度間違えると動作しないので注意してください。

プログラム

動作どうさ

このプログラムを実行している間にスイッチを押すとArduinoボード上のLEDが

  1. 消灯
  2. 点灯
  3. 点滅
と変わります。 ここでは変数sを上記の3つの状態を覚えておくために使っています。

解説かいせつ

スイッチを押すと2番ピンがLOWになり、一つ目のif文の中身が実行されます。

  if(digitalRead(2)==LOW) {
    s=s+1;
    if(s>2)
     s=0;
    delay(20);
    while(digitalRead(2)==LOW) {}
  }
まずsに1を足し、sが2を超えているなら(3以上)sを0にします。これでsが0→1→2→0→1→2→0→…と変わります。その次の行で20ミリ秒(20/1000秒)待っています。これはスイッチを押してすぐはオンとオフを高速に切り替わる現象(チャタリング)に反応しないためです。20ミリ秒ぐらい待つと安定します。それからwhile文でスイッチが押されている間、何もせずに待っています。スイッチから手を離すと{と}で囲まれた範囲は終わりです。

残りの部分ではsの値に応じて、0ならLEDを消灯、1ならLEDを点灯、2ならLEDを1回点滅しています。

先頭の

int s = 0;
は変数sの宣言と0の代入を1行で済ませています。
戻る
(c) 2014-2015 N. Mitsunaga
サンプルプログラムの著作権は放棄します。fritzingで作成した図は、そちらのライセンスに従って再配布して構いません。