ゼロまでカウントダウン
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が表示されたままになります。
チャレンジ
簡単ブザーはピン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() {
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ディスプレイとセンサーのすべてのレッスン
自分で練習してみよう: Arduinoプレイグラウンド