BÀI 5: ĐIỀU KHIỂN LED BẰNG NÚT NHẤN

Mục tiêu bài học

  • Sử dụng nút nhấn để điều khiển LED theo 2 cách:

    • Bật/tắt khi nhấn giữ (trạng thái tức thời).

    • Bật/tắt khi nhấn một lần (trạng thái chuyển đổi).

Hướng dẫn nạp code

Bước 1: Kết nối Arduino Uno với máy tính

  • Sử dụng cáp USB (loại USB A to B, giống cáp máy in).

  • Cắm một đầu vào Arduino Uno, đầu còn lại vào cổng USB của máy tính.

Bước 2: Cài đặt phần mềm Arduino IDE

Bước 3: Mở Arduino IDE và thiết lập cấu hình

  1. Mở Arduino IDE.

  2. Vào menu Tools (Công cụ)Board (Bo mạch) → chọn Arduino Uno.

  3. Vào ToolsPort → chọn đúng cổng COM (thường là COM3, COM4,... tùy máy).

    Nếu không thấy cổng COM, hãy kiểm tra driver USB hoặc cài CH340 Driver nếu Arduino dùng chip CH340.

Bước 4: Cài đặt phần mềm Arduino IDE

  • Nhấn nút Upload (mũi tên →) trên thanh công cụ.

  • Quan sát thanh trạng thái, khi hiện "Done uploading" nghĩa là nạp thành công.

Điều khiển LED bằng nhấn giữ

Nguyên lý:

  • LED chỉ sáng khi nút được nhấn giữ.

  • Thả ra → LED tắt.

Code mẫu:

void setup() {
  pinMode(7, INPUT_PULLUP); // Nút nhấn
  pinMode(13, OUTPUT);      // LED tích hợp
}

void loop() {
  if (digitalRead(7) == LOW) {
    digitalWrite(13, HIGH); // Nhấn giữ → LED sáng
  } else {
    digitalWrite(13, LOW);  // Thả ra → LED tắt
  }
}

Điều khiển LED bằng nhấn một lần (Toggle)

Nguyên lý:

  • Mỗi lần nhấn → LED đổi trạng thái.

  • Nhấn lần 1 → sáng, nhấn lần 2 → tắt, nhấn lần 3 → sáng...

Cần xử lý debounce và trạng thái nhấn

Code toggle đơn giản có chống dội:

bool ledState = false;
bool lastButtonState = HIGH;

void setup() {
  pinMode(7, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {
  bool currentButtonState = digitalRead(7);

  // Khi phát hiện nhấn và chỉ xử lý 1 lần khi chuyển từ HIGH -> LOW
  if (lastButtonState == HIGH && currentButtonState == LOW) {
    ledState = !ledState; // Đảo trạng thái LED
    digitalWrite(13, ledState ? HIGH : LOW);
    delay(50); // chống dội
  }

  lastButtonState = currentButtonState;
}

Thử thách cho học viên

  • Thêm nút thứ 2 để “tắt LED khẩn cấp”.

  • Điều khiển 2 LED: 1 LED nhấn giữ, 1 LED toggle.

  • Bật LED bằng nhấn và tắt bằng giữ nút 3 giây.

Kiến thức rút ra

  • Hiểu rõ sự khác biệt giữa tín hiệu tức thờichuyển đổi trạng thái.

  • Biết cách dùng biến lưu trạng thái để điều khiển thiết bị.

  • Biết ứng dụng delay nhỏ để chống dội phím hiệu quả.

Các hàm Arduino quan trọng trong bài học

🟢 pinMode(pin, mode)

  • Công dụng: Thiết lập chế độ cho chân (pin) là INPUT, OUTPUT hoặc INPUT_PULLUP.

  • Ví dụ:

pinMode(7, INPUT_PULLUP); // Nút nhấn dùng điện trở kéo lên nội bộ
pinMode(13, OUTPUT);      // Chân LED xuất tín hiệu

🟢 digitalRead(pin)

  • Công dụng: Đọc tín hiệu số từ chân pin, trả về:

    • HIGH (1): Có điện áp (5V hoặc 3.3V)

    • LOW (0): GND (0V)

  • Ứng dụng: Đọc trạng thái nút nhấn.

  • Ví dụ:

int buttonState = digitalRead(2);

🟢 digitalWrite(pin, value)

  • Công dụng: Gửi tín hiệu số ra chân pin để bật/tắt thiết bị.

    • HIGH → Bật (LED sáng, relay ON…)

    • LOW → Tắt

  • Ví dụ:

digitalWrite(13, HIGH); // Bật LED
digitalWrite(13, LOW);  // Tắt LED

🟢 delay(ms)

  • Công dụng: Tạm dừng chương trình trong ms mili giây.

  • Ứng dụng trong bài này:

    • Chống dội phím (debounce)

  • Ví dụ:

delay(50); // dừng 50ms để bỏ qua nhiễu từ nút nhấn

🟢 Biến kiểu bool

  • Dùng để lưu trạng thái LED bật/tắt (true/false).

  • Rất tiện khi làm chế độ nhấn 1 lần bật/tắt luân phiên.

  • Ví dụ:

bool ledState = false;

ledState = !ledState; // Đảo trạng thái: true → false, false → true
digitalWrite(13, ledState ? HIGH : LOW); // Bật/tắt LED theo trạng thái

🟢 Biến tạm lastButtonState

  • Giúp phát hiện sự chuyển đổi trạng thái từ HIGH → LOW để thực hiện hành động duy nhất mỗi lần nhấn.

  • Tránh lặp lệnh khi giữ nút.

Nhận xét

Mới hơn Cũ hơn