いそぷろのブログ

おもしろいことを考えていきたい

【Arduino電子工作】スイッチを押している間だけLEDをじわっと光らせる

目的

LEDをタクトスイッチを押している間だけじわ~っと光らせる

途中で離したら光を消す

 

今回使うもの

過去記事と同じ

www.isopro91.com

 

設計・計算

基本的には過去記事と同じ

 

異なる点はスイッチを押している間だけ、じわっと光らせる点

 

じわっと光らせるプログラムは過去にもfor文を用いてやったことがある

 

スイッチを押しているかどうかの判断をfor文に入る前にif文で処理する

さらに途中でスイッチを離したかどうかの判断をfor文内に書いておく

そしてスイッチを離していると判断できた場合にはfor文の処理を中断し、LEDの光を消す

 

といったプログラムを付け加えていく

 

回路

過去記事とまったく同じなので省く

 

プログラム

/*
目的:タクトスイッチを押している間だけじわっと光らせる
http://www.isopro91.com
2015/6/1
*/

int led1 = 13;
int sw1 = 7;
int flag = 0; //スイッチの状態格納用の変数
int val = 0; //for文での数値格納に使う

void setup() {
    pinMode(sw1, INPUT); //ピンのモードを入力に
}

void loop() {
    flag = digitalRead(sw1); //スイッチの状態を読み、flagに結果を代入する

    if(flag==1){ //スイッチが押されていない場合LEDをOFF
      analogWrite(led1, 0);
    }

    if(flag==0){ //スイッチが押されていた場合、for文の処理にはいる
      for(int i=0; i<256; i++){
        val = i;
        analogWrite(led1, val);
        delay(15);
        flag = digitalRead(sw1); //スイッチの状態を読む
        if(flag==1)break; //スイッチを離していた場合、ループから抜ける
      }
    }
}

 

プログラム内でスイッチ押されているか否かについてif文を二回つかっているが、一回でもよいことに気づいた

つまり

if(flag==1){ //スイッチが押されていない場合

 ・・・・ //LEDを消す

}else{ //スイッチが押されている場合

 ・・・・ //LEDをつける

}

といった書き方にすればすっきりするように思える

まあどの書き方でも動くので問題はない

 

実際の動作

 

おわり