モードを記憶する
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、そのほかの数字も使えます。
チャレンジ
簡単緑のボタンはピン 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に従って動作する
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
delayを使わないタイミング制御のすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド