Menu
CoddyTech

Đếm ngược về 0

Thuộc phần Màn hình và cảm biến trong hành trình Arduino của Coddy. Bài học 4 trên 24.

Tương tự như trong bài quét servo, vòng lặp for có thể đếm ngược: bắt đầu từ số lớn, tiếp tục khi số đó lớn hơn hoặc bằng 0 và mỗi lần giảm đi một đơn vị bằng n--:

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

Đoạn code này hiển thị 5, 4, 3, 2, 1 và 0. Với n > 0, vòng lặp sẽ dừng ở 1 và không bao giờ hiển thị 0.

Việc đếm ngược chỉ nên diễn ra một lần, không lặp đi lặp lại. Code trong setup() chạy một lần, vì vậy hãy đặt phần đếm ngược ở đó, rồi đến bất cứ việc gì cần xảy ra khi bộ đếm về 0. Bạn có thể để loop() trống, và số 0 sẽ giữ nguyên trên màn hình.

challenge icon

Thử thách

Dễ

Còi báo nối với chân 9. Tạo màn đếm ngược trước khi phóng:

  • trong setup(), đếm ngược từ 5 đến 0, mỗi giây một số
  • khi đến 0, phát âm thanh bằng còi báo với tone(buzzerPin, 880, 1000)
  • giữ số 0 trên màn hình

Nhấn Chạy, rồi nhấn Kiểm tra.

Tự làm thử

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

// Mỗi chữ số có một mẫu, đọc từ bên phải: bit cuối cùng là đoạn 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);   // sáng
    } else {
      digitalWrite(segmentPins[i], HIGH);  // tắt
    }
  }
}

const int buzzerPin = 9;

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

  // Đếm ngược từ 5 đến 0 ở đây, rồi cho còi kêu
}

void loop() {
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Màn hình và cảm biến

Tự luyện tập: Playground Arduino