Trang chủ Điện - Điện tửArduinoĐIỀU KHIỂN LED BẰNG NÚT NHẤN

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

bởi Admin
28 lượt xem 7 Phút đọc

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.

Để lại bình luận

Focus Mode

Đã phát hiện trình chặn quảng cáo

Vui lòng hỗ trợ chúng tôi bằng cách tắt tiện ích chặn quảng cáo (AdBlocker) trên trình duyệt của bạn khi truy cập trang web của chúng tôi.