Đèn hẹn giờ
Thuộc phần Định thời không dùng delay trong hành trình Arduino của Coddy. Bài học 6 trên 18.
Đèn cầu thang bật sáng khi bạn nhấn nút và tự tắt sau một lúc. Nếu đèn đang sáng mà bạn nhấn nút lần nữa, bộ đếm thời gian sẽ bắt đầu lại.
Việc này cần hai thứ: thời điểm nhấn nút lần cuối và trạng thái đèn đang bật hay tắt. Lưu thời điểm vào một biến unsigned long khi nút được nhấn:
if (digitalRead(buttonPin) == LOW) {
pressedAt = millis(); // Bắt đầu (hoặc bắt đầu lại) tính thời gian
lightOn = true;
digitalWrite(ledPin, HIGH);
}Sau đó, ở mỗi vòng lặp, kiểm tra thời gian đã trôi qua:
if (lightOn && millis() - pressedAt >= onTime) {
lightOn = false;
digitalWrite(ledPin, LOW);
}Hai phần này không bao giờ phải chờ, nên hệ thống sẽ nhận biết thao tác nhấn vào bất kỳ lúc nào, kể cả khi đèn đang sáng. Nếu dùng delay(2000) sau khi nhấn nút, thao tác nhấn lần thứ hai trong lúc chờ sẽ bị bỏ qua.
Thử thách
DễLắp đèn cầu thang:
- nhấn nút thì đèn LED ở chân 13 sáng ngay lập tức
- 2 giây sau khi nhấn, đèn tự tắt
- nhấn nút khi đèn đang sáng sẽ bắt đầu lại khoảng thời gian 2 giây
Nhấn Chạy, nhấn nút vài lần, rồi nhấn Kiểm tra.
Tự làm thử
const int ledPin = 13;
const int buttonPin = 2;
const unsigned long onTime = 2000; // thời gian đèn sáng
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
// khi nhấn nút: bật đèn LED và ghi nhớ thời điểm đó
// khi đã qua onTime kể từ thời điểm đó: tắt đèn LED
}
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 Định thời không dùng delay
Tự luyện tập: Playground Arduino