Menu
CoddyTech

押すたびに切り替える

CoddyのArduinoジャーニー「入力」セクションの一部。レッスン 4/22。

これまで、LEDはボタンの状態をそのまま反映していました。押している間は点灯し、離すと消灯します。ランプのスイッチは動作が異なります。1回押すと点灯し、もう1回押すと消灯します。これがトグルです。

トグルするには、ボタンが押された瞬間をスケッチが検知する必要があります。つまり、今は押されているけれど、前回loop()が実行されたときは押されていなかった状態です。この瞬間をエッジと呼びます。カウンターのように、最後に読み取った値をsetup()より上で変数に保持します。

int lastReading = HIGH;

void loop() {
  int reading = digitalRead(2);
  if (reading == LOW && lastReading == HIGH) {
    // ボタンが押された
  }
  lastReading = reading;
}

ボタンを押し続けると読み取り値はLOWのままなので、押している時間の長さにかかわらず、エッジは押すたびに1回だけ発生します。

boolの値を反転するには、「否定」を意味する!を使います。ledOn = !ledOn;はtrueをfalseに変え、またその逆にも変えます。

challenge icon

チャレンジ

中級

ボタンはピン2(INPUT_PULLUP)、LEDはピン13に接続されています。ボタンを押すたびにLEDの状態を切り替えます:

  • ボタンが押されたとき(現在はLOW、前回はHIGH)、ledOnを反転させます
  • loop()の最後に読み取り値をlastReadingに保存します
  • ledOnに合わせてLEDを点灯または消灯します

Runを押し、ボタンを数回押してから、Checkを押します。

自分で試してみよう

const int buttonPin = 2;
const int ledPin = 13;

bool ledOn = false;
int lastReading = HIGH;

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

void loop() {
  int reading = digitalRead(buttonPin);
  // ボタンが押されたらledOnを反転させる
  // 次回のために今回の読み取り値を記憶する
  // ledOnに合わせてLEDをオンまたはオフにする
}
quiz icon腕試し

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

入力のすべてのレッスン

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