Menu
CoddyTech

ボタンで切り替えながら点滅

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

決して待機しないスケッチなら、ボタンを監視しながら同時に点滅処理を実行できます。ループは数マイクロ秒で終わるため、ボードは1秒間に何千回もボタンを確認し、ごく短いタップも検知できます。

点滅処理はmillis()パターンです。ボタンの処理はInputsセクションで説明したエッジチェックです。つまり、今ボタンが押されていて、前のループでは押されていなかったときに処理します。!は「ではない」という意味なので、!wasPressedは「押されていなかった」と読みます。

bool wasPressed = false;

void loop() {
  // 点滅処理: if (now - previous >= 500) { ... }

  bool pressed = digitalRead(buttonPin) == LOW;
  if (pressed && !wasPressed) {
    // ボタンが押された直後
  }
  wasPressed = pressed;
}

両方の処理をloop()に続けて書き、どちらにもdelay()を入れないでください。点滅処理が500 ms待機すると、その待機中に始まって終わるタップは検知されません。

challenge icon

チャレンジ

中級

ボードで2つのことを同時に行いましょう。

  • 13番ピンの赤色LEDが、millis()を使って500 msごとに切り替わる
  • ボタンを押すたびに、12番ピンの黄色LEDがオン、オフ、オンの順に切り替わる

ボタンを軽く押してすぐ離しても、いつでも反応する必要があります。また、ボタンを押し続けても、黄色LEDが切り替わるのは1回だけです。Runを押し、ボタンを押してから、Checkを押してください。

自分で試してみよう

const int redLed = 13;
const int yellowLed = 12;
const int buttonPin = 2;

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

void loop() {
  // 1. millis() を使って、赤色 LED を 500 ms ごとに点灯・消灯させる

  // 2. ボタンを押すたびに、黄色 LED の点灯・消灯を切り替える
}
quiz icon腕試し

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

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

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