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
-
Truy cập: https://www.arduino.cc/en/software
-
Tải về và cài đặt bản phù hợp với hệ điều hành của bạn (Windows, macOS hoặc Linux).
Bước 3: Mở Arduino IDE và thiết lập cấu hình
-
Mở Arduino IDE.
-
Vào menu Tools (Công cụ) → Board (Bo mạch) → chọn Arduino Uno.
-
Vào Tools → Port → 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ời và chuyể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