Menu
CoddyTech

Đổ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.

challenge icon

Thử thách

Trung bình

Nú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ái ledOn
  • lưu giá trị đọc được vào lastReading ở cuối loop()
  • 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
}
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 Đầu vào

Tự luyện tập: Playground Arduino