Đổi trạng thái sau mỗi lần nhấn
Thuộc phần Đầu vào trong hành trình Arduino của Coddy. Bài học 4 trên 22.
Cho đến giờ, LED sao chép nút bấm: bật khi bạn nhấn giữ, tắt khi bạn thả ra. Công tắc đèn hoạt động khác: nhấn một lần để bật, nhấn lần nữa để tắt. Đó là thao tác bật tắt luân phiên.
Để bật tắt luân phiên, sketch cần nhận biết thời điểm nút bấm được nhấn xuống: hiện đang được nhấn, nhưng lần trước khi loop() chạy thì chưa. Thời điểm đó được gọi là cạnh. Lưu lần đọc trước vào một biến phía trên setup(), giống như bộ đếm:
int lastReading = HIGH;
void loop() {
int reading = digitalRead(2);
if (reading == LOW && lastReading == HIGH) {
// Nút vừa được nhấn
}
lastReading = reading;
}Giữ nút bấm sẽ giữ giá trị đọc ở LOW, nên cạnh chỉ xảy ra một lần mỗi lần nhấn, dù bạn giữ nút bao lâu.
Để đảo giá trị bool, hãy dùng !, có nghĩa là “không”: ledOn = !ledOn; chuyển true thành false và ngược lại.
Thử thách
Trung bìnhNút bấm được nối với chân 2 (INPUT_PULLUP) và đèn LED với chân 13. Mỗi lần nhấn, hãy bật hoặc tắt đèn LED:
- khi nút được nhấn (
LOWở lần đọc hiện tại,HIGHở lần đọc trước), đảo trạng tháiledOn - lưu giá trị đọc được vào
lastReadingở cuốiloop() - bật hoặc tắt đèn LED cho khớp với
ledOn
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 buttonPin = 2;
const int ledPin = 13;
bool ledOn = false;
int lastReading = HIGH;
void setup() {
pinMode(buttonPin, INPUT_PULLUP);
pinMode(ledPin, OUTPUT);
}
void loop() {
int reading = digitalRead(buttonPin);
// Đảo trạng thái ledOn khi nhấn nút
// Lưu giá trị đọc này cho lần sau
// Bật hoặc tắt đèn LED theo trạng thái ledOn
}
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 Đầu vào
1Nút nhấn
In trạng thái của nút nhấnĐiện trở kéo xuốngĐiện trở kéo lên tích hợpĐổi trạng thái sau mỗi lần nhấnĐếm số lần nhấn nútKhử dội nút nhấnNhấn hai nút cùng lúc3Nhập liệu qua cổng nối tiếp
Đọc một ký tự qua cổng nối tiếpLệnh bằng từĐiều chỉnh tốc độ nhấp nháy qua cổng nối tiếpNhấp nháy theo lệnhTự luyện tập: Playground Arduino