Menu
CoddyTech

倒数到零

本课属于 Coddy Arduino 学习旅程的“显示器与传感器”单元。第 4 课,共 24 课。

和舵机扫描一样,for 循环也可以倒计数:从较大的数开始,只要数字大于或等于 0 就继续,每次减 1,也就是 n--:

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,每秒显示一个数字
  • 倒数到 0 时,用 tone(buzzerPin, 880, 1000) 让蜂鸣器发声
  • 让显示屏上保留数字 0

按“运行”,然后按“检查”。

亲手试试

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

// 每个数字对应一种模式,从右往左读:最右边的一位对应线段 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 在线编辑器