Menu
CoddyTech

ゼロまでカウントダウン

CoddyのArduinoジャーニー「ディスプレイとセンサー」セクションの一部。レッスン 4/24。

サーボのスイープと同様に、forループでカウントダウンできます。大きい値から始め、数値が0以上の間は続け、毎回n--で1ずつ減らします。

for (int n = 5; n >= 0; n--) {
  showDigit(n);
  delay(1000);
}

これで5、4、3、2、1、0が表示されます。n > 0の場合は1で止まり、0は表示されません。

カウントダウンは何度も繰り返すのではなく、一度だけ行う必要があります。setup()内のコードは一度だけ実行されるので、カウントダウンと、その後0になったときの処理をそこに置きます。loop()は空のままでよく、ディスプレイには0が表示されたままになります。

challenge icon

チャレンジ

簡単

ブザーはピン9に接続されています。発射カウントダウンを作りましょう:

  • setup()で、5から0まで1秒ごとにカウントダウンする
  • 0になったら、tone(buzzerPin, 880, 1000)でブザーを鳴らす
  • ディスプレイに0を表示したままにする

Runを押してから、Checkを押してください。

自分で試してみよう

const int segmentPins[7] = {2, 3, 4, 5, 6, 7, 8};  // a, b, c, d, e, f, g

// 各数字に1つのパターン。右から読むと、最後のビットがセグメント a に対応します。
//                     gfedcba
const byte digits[10] = {
  0b0111111,  // 0
  0b0000110,  // 1
  0b1011011,  // 2
  0b1001111,  // 3
  0b1100110,  // 4
  0b1101101,  // 5
  0b1111101,  // 6
  0b0000111,  // 7
  0b1111111,  // 8
  0b1101111   // 9
};

void showDigit(int n) {
  for (int i = 0; i < 7; i++) {
    if (bitRead(digits[n], i) == 1) {
      digitalWrite(segmentPins[i], LOW);   // 点灯
    } else {
      digitalWrite(segmentPins[i], HIGH);  // 消灯
    }
  }
}

const int buzzerPin = 9;

void setup() {
  for (int i = 0; i < 7; i++) {
    pinMode(segmentPins[i], OUTPUT);
  }

  // ここで 5 から 0 までカウントダウンし、その後ブザーを鳴らす
}

void loop() {
}
quiz icon腕試し

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

ディスプレイとセンサーのすべてのレッスン

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