Mục lục bài viết

1. Thiết kế mạch điều khiển led bằng nút bấm

Cấu tạo nút bấm (button)

Nút bấm trên Arduino

Nút bấm có 4 chân chia làm 2 cặp. Những chân trong cùng một cặp được nối với nhau. Khi nhấn nút, cả 4 chân của nút bấm đều được nối với nhau, cho phép dòng điện từ một chân bất kì có thể tới 3 chân còn lại.

Sơ đồ chân nút bấm

Nguyên lý hoạt động của button trong board mạch Arduino

Schematic button với Arduino

Button muốn hoạt động cần có nguồn dương (5V) và nguồn âm (GND). Có 1 điện trở 10kΩ nối bên nguồn âm (GND). Trạng thái nút bấm là bấm nút (giá trị nhận được là 1) hoặc không bấm nút (giá trị nhận được là 0) sẽ được lấy ở chân 2 trên Arduino.

Khi chưa nhấn nút, chân 2 của Arduino được nối với GND qua một điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 0 (LOW).

Khi nhấn nút, chân 2 của Arduino sẽ được nối trực tiếp với 5V và nối với GND thông qua 1 điện trở 10kΩ, lệnh digitalRead(2) sẽ trả về giá trị 1 (HIGH).

Mạch điều khiển led bằng nút bằng với board mạch Arduino

Gồm 1 board Arduino, 1 led, 2 điện trở, 1 button.

Sơ đồ mạch điều khiển led bằng button với Arduino

Có thể thiết kế mạch giả lập với Proteus như hình bên dưới.

Sơ đồ mạch Proteus điều khiển led bằng button với arduino

2. Viết chương trình điều khiển led sáng tắt bằng nút bấm

int button = 9;
int led = 5;
void setup() {
  pinMode(button, INPUT);//khai báo chân button có thể đọc dữ liệu
  pinMode(led,OUTPUT);//khai báo chân led là ngõ ra
}

void loop() {
  int buttonStatus = digitalRead(button);//đọc trạng thái button
  if (buttonStatus == HIGH) {//nếu mà button được nhấn
    digitalWrite(led,HIGH); //bật led
  } else {//ngược lại
    digitalWrite(led,LOW);//tắt led
  }
}

Biến buttonStatus lưu trữ trạng thái của nút bấm. Nếu đã bấm (buttonStatus == HIGH) thì bật đèn và ngược lại.

3. Đếm số lần nhấn button

Trong nhiều trường hợp, chúng ta cần đếm số lần nhấn button. Chương trình bên dưới giúp đếm số lần nhấn button.

int button = 9;
int led = 5;
int preStateButton=LOW;//lưu trạng thái trước của button
int count = 0;//biến lưu số lần nhấn button
void setup() {
  pinMode(button, INPUT);
  pinMode(led,OUTPUT);
}

void loop() {
  int curStateButton = digitalRead(button);//lấy trạng thái hiện tại của button
  if (curStateButton==HIGH && preStateButton==LOW){
    count++;
  }
  preStateButton=curStateButton;
}

Biến count lưu số lần nhấn button. Ban đầu, count=0. Biến preStateButton lưu trạng thái trước đó của button. Biến curStateButton lưu trạng thái hiện tại của button. Chỉ khi nào curStateButton==HIGH (nhấn)preStateButton==LOW (không nhấn) thì lúc đó mới là một lần nhấn button và mới đếm là một lần nhấn.

Để hiểu rõ hơn, chúng ta cùng xem dãy các trạng thái của button: ban đầu là LOW (không nhấn) rồi nhấn (HIGH) LOW HIGH LOW HIGH LOW…Rõ ràng, một button được xem là một lần nhấn khi và chỉ khi chuyển trạng thái từ LOW sang HIGH, còn từ HIGH sang LOW thì là không nhấn button.

4. Bài tập

Bài tập 1: Thiết kế mạch gồm 1 đèn LED kết nối với Arduino qua cổng ~10 và nút bấm qua cổng 2. Xử lí khi nhấn nút lần đầu thì đèn sáng, lần 2 đèn tắt, lần 3 đèn sáng, …

Bài tập 2: Thiết kế mạch gồm 1 đèn LED và 2 nút bấm (nút tăng và nút giảm) kết nối với Arduino. Xử lý khi nhấn nút tăng sẽ tăng dần độ sáng của đèn đến hết mức thì không thể tăng được nữa, nhấn nút giảm thì giảm dần độ sáng của đèn đến hết mức thì không thể giảm được nữa.

Tác giả

Vinh Lê

Giảng viên CNTT, chia sẻ tutorial lập trình & phần cứng tại Góc Học IT. Hơn 500 bài viết hướng dẫn từ cơ bản đến nâng cao.

Gợi ý tiếp theo

Lập trình điều khiển nhiều led bằng IC HC595 với board mạch Arduino

Học tiếp