Menu
CoddyTech

モードを記憶する

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

ボタンを押している時間はほんの一瞬ですが、それによって始まる動作はずっと長く続くことがあります。ボタンを離した後も続けるには、スケッチが何をしているのかを記憶しておく必要があります。そのための変数は、状態またはモードと呼ばれます。

int mode = 0;   // 0 = オフ、1 = 点滅

loop()を2つに分けます。まず、入力によってモードだけを変更します。次に、ループの残りの部分でモードに応じた動作をします。

// 1. 入力によってモードが変わる
if (digitalRead(blinkButton) == LOW) {
  mode = 1;
}

// 2. モードによって動作が決まる
if (mode == 1) {
  // millis()を使って点滅させる
} else {
  digitalWrite(ledPin, LOW);
}

それぞれの数字は、スケッチが実行できる動作の1つを表します。各数字の意味をコメントに書きましょう。スケッチには必要なだけモードを設定できます。0、1、2、3、そのほかの数字も使えます。

challenge icon

チャレンジ

簡単

緑のボタンはピン 2、赤のボタンはピン 3 に接続されています。

  • 緑のボタンを押すと mode が 1 に設定され、赤のボタンを押すと 0 に設定されます
  • mode が 1 のとき、ピン 13 の LED は millis() を使って点滅します。500 ms 点灯し、500 ms 消灯します
  • mode が 0 のとき、LED は消灯します

Run を押し、緑のボタンを押して離した後、赤のボタンを押してください。その後、Check を押してください。

自分で試してみよう

const int ledPin = 13;
const int blinkButton = 2;   // 緑
const int offButton = 3;     // 赤

int mode = 0;   // 0 = 消灯、1 = 点滅

unsigned long previousMillis = 0;
int ledState = LOW;

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

void loop() {
  // 1. ボタンはmodeを変更するだけ

  // 2. 次にmodeに従って動作する
}
quiz icon腕試し

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

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

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