Menu
CoddyTech

タイマーで点灯

CoddyのArduinoジャーニー「delayを使わないタイミング制御」セクションの一部。レッスン 6/18。

階段の照明は、ボタンを押すと点灯し、少し経つと自動的に消灯します。点灯中にもう一度押すと、時間がリセットされます。

そのためには2つの情報が必要です。最後にボタンを押した時刻と、照明が点灯しているかどうかです。ボタンが押されたときに、時刻をunsigned longに保存します。

if (digitalRead(buttonPin) == LOW) {
  pressedAt = millis();     // 時間の計測を開始(または再開)する
  lightOn = true;
  digitalWrite(ledPin, HIGH);
}

次に、ループのたびに、どれだけ時間が経過したかを確認します。

if (lightOn && millis() - pressedAt >= onTime) {
  lightOn = false;
  digitalWrite(ledPin, LOW);
}

どちらの処理も待機しないため、照明がすでに点灯している間でも、いつボタンを押しても検知されます。ボタンを押した後にdelay(2000)を使うと、待機中にもう一度押しても、その入力は見逃されてしまいます。

challenge icon

チャレンジ

簡単

階段用の照明を作りましょう。

  • ボタンを押すと、13番ピンのLEDがすぐに点灯します
  • ボタンを押してから2秒後に、自動的に消灯します
  • 点灯中にボタンを押すと、2秒のカウントが再スタートします

Runを押し、ボタンを数回押してから、Checkを押してください。

自分で試してみよう

const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000;   // ライトが点灯している時間

void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  // ボタンが押されたら:LEDを点灯し、その時刻を記録する

  // その時刻からonTimeが経過したら:LEDを消灯する
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

delayを使わないタイミング制御のすべてのレッスン

自分で練習してみよう: Arduinoプレイグラウンド