03 スイッチのON-OFFでLEDを点灯・消灯してみました

スケッチ:lesson 03
 
// lesson 03 : ボタンのON-OFFでLEDを点灯・消灯する

const int LED = 9;            // LEDが接続されているピン
const int BUTTON = 7;         // プッシュボタンが接続されているピン

int val = 0;                  // 入力ピンの状態がこの変数に記憶される
int i = 0;                    // カウントアップ・ダウン用

void setup() {
  pinMode(LED, OUTPUT);       // arduinoにLEDが出力であると伝える
  pinMode(BUTTON, INPUT);     // BUTTONは入力に設定
}

void loop() {
  val = digitalRead(BUTTON);  // 入力を読み取りvalに格納

  // 入力はHIGH(ボタンが押されている状態)か?
  if (val == HIGH) {
    for (i = 0; i < 255; i++) { // フェードイン
      analogWrite(LED, i);      // LEDの明るさをセット
      delay(10);                // analogWrite()は一瞬なので、delayがないと変化が見えない
    }
  } else {
    for (i = 255; i > 0; i--) { // フェードアウト
      analogWrite(LED, i);
      delay(10);
    }
  }
}

              
 

Arduinoをはじめよう 第2版の Example02 と Example04 のスケッチを使用しました。

スイッチのON-OFFでじわーっと点灯・消灯する様子が見られると思います。車のドアスイッチのON-OFFと組み合わせると上手くいきそうです。

スイッチの状態を見ているだけなので、チャタリングの対策はしていません。スイッチを押すことにより、ONーOFFの状態を交互に変えるような処理だと必要だと思うんですが、今回は多分無くても大丈夫という甘い気持ちからです。

もしかするとスイッチの遷移前・後の状態を比較して処理を行った方がいい気もします。Arduinoをはじめよう 第2版の Example03a~03c の処理ですね。(流用するのだったら完成形の Example03c ですね。)

考慮すべき点として、ドアをちょっと開けてすぐに閉めてもフェードインの処理から抜けていないので、輝度マックスになってから消灯の処理(逆の場合も同じ)が走る点ですね。今回はこのままでよしとして、残課題として頭に入れておきます。(すぐに忘却してしまう気も...)