見出し画像

Arduino LEDを徐々に明るくする

arduinoでmillisを使用し、タクトスイッチを押すとLEDを徐々に明るくし、点灯状態を続ける。
タクトスイッチ1個、LED1個使用する。

//スイッチNo.a
const int switch_a = 2; //2番ピンにスイッチ1
int val_swa = 0; //状態保存用
int old_val_swa = 0; //状態保存用
int state_swa = 0; //状態保存用
unsigned long old_time_swa; //時間保存用

//LED PWM
const int LED_a = 5; //5番ピンにLED_a(「~」のあるピンにする。)
int a = 1; //状態保存用
int val_a = 0; //状態保存用
unsigned long old_time_a; //時間保存用

void setup()
{
pinMode(switch_a, INPUT_PULLUP); //switchを入力に設定
pinMode(LED_a, OUTPUT); //LEDピンを出力にする
}

void loop()
{
//スイッチNo.aの動作設定PWM点灯------------------------------------------------------------------------------
val_swa = digitalRead(switch_a); //switch_aの状態を読み込み、valに代入
  old_time_swa = millis();//最新の実行時間を保存
  if((val_swa == HIGH) && (old_val_swa == LOW)){
    state_swa = 1 - state_swa;
    while (millis() - old_time_swa < 10); //現在の実行時間-前回の実行時間が10ミリ秒に達するまで待つ
  }
  old_val_swa = val_swa;
//スイッチNo.aが押されたら下記実行
  if(state_swa == 0){
    old_time_a = millis(); //最新の実行時間を保存
    analogWrite(LED_a, val_a); //LED_aをval_aの値で点灯
    val_a = val_a + a;
    if(val_a == 0) a = 1; //val_a 1づつ状態UP
    if(val_a == 255) a = 0; //val_a MAX状態255をキープ
    while (millis() - old_time_a < 10); //現在の実行時間-前回の実行時間が10ミリ秒に達するまで待つ
  }
//スイッチNo.aがもう一度押されたら下記実行
  else{
   analogWrite(LED_a, LOW); //LED_a 消灯
   val_a = 0; //val_aに0を代入
  }

}

millisはプログラムの実行を開始してからの経過時間をミリ秒で返します。
while (millis() - old_time_a < 10);
経過時間からold_time_aを引き、10ミリ秒待ちます。
なので上記の場合、LEDは10ミリ秒ごとに1段階上がり、2560ミリ秒で一番明るくなります。
この値を大きくするとゆっくり明るくなります。
もう一度スイッチが押された時に、消灯と同時に、「val_a」に「0」を保存します。
そうすることによって次にスイッチが押された時に初めからカウントが始まります。

この記事が気に入ったらサポートをしてみませんか?