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

Đây là bài 8/17 bài của series môn học Lập trình Arduino cơ bản

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.

4.8/5 - (5 bình chọn)
Bài trước và bài sau trong môn học<< Lập trình điều khiển nhiều led với board mạch ArduinoLập trình điều khiển nhiều led bằng IC HC595 với board mạch Arduino >>
Chia sẻ trên mạng xã hội:

14 bình luận về bài viết “Lập trình điều khiển led bằng nút bấm với board mạch Arduino

  1. Giúp em bài tập này vơi
    – Nếu ấn S1 hệ thống ở trạng thái dèn cảnh báo (cả 2 trụ chớp đèn vàng)
    – Nếu ấn S2 hệ thống ở trạng thải đèn giao thông bình thường

  2. hệ thống 20 đèn LED, yêu cầu:
    – Sử dụng 4 Pin: 13; 12; 11; 10; trên Arduino biết mỗi Pin điều khiển dãy 5 LED
    – Kết hợp với 4 nút bấm BUTTON, mỗi nút bấm điều khiển một dãy 5 LED độc lập
    – Kết hợp với biến trở POTENTIOMETER điều khiển độ sáng của một dãy đèn led
    tùy chọn (sử dụng analogRead để đọc giá trị của biến trở), kết nối biến trở với Pin
    Analog A0

  3. Vì sao ko kết nối trực tiếp chân output của arduino vào nút bấm mà phải qua điện trở? trả lời sớm giúp em ạ

  4. Chào anh, anh giúp em bài này với ạ :

    “Lập trình mô phỏng động cơ DC (5V) bằng 1 nút nhấn (khi nhấn vào thì động cơ chạy, thả ra thì tắt). Và điều khiển tốc độ quay của động cơ bằng 1 nút (khi nhấn thì sẽ quay nhanh, khi thả ra thì sẽ tắt).”

    Em cảm ơn ạ <3

  5. ad có thể giúp em
    vẽ sơ đồ và phương trình
    Nhấn nút 1 đèn 1, Đèn 2 sáng
    nhấn nút 2 dèn 1 tắt
    nhấn nút 3 đèn 2 tắt

  6. Anh giúp em viết code bài tập này được ko ạ!
    a. Nhấn nút 1 nhấp nháy 3 lần với chu kỳ 0,8s, sau đó sáng tắt xen kẽ với chu kỳ 1s và lặp lại.
    b. Nhấn nút 2 nhấp nháy 3 lần với chu kỳ 0,6s, sau đó chạy 1 led từ trái sang phải với thời gian delay 0,5s rồi lặp lại.
    c. Nhấn nút 3 off.

  7. ad giúp em code bài này được không ạ
    lập trình arduino tính xem từ khoảng thời gian từ lần nhấn nút trước tới lần vừa nhấn nút là bao nhiêu,. từ khoảng thơi gian giữa 2 lần nhấn nút này tính xem tốc độ là bai nhiêu

  8. Anh có thể code giúp em bài này được không ạ
    lập trình vi điều khiển

    + Ban đầu khi mới cấp điện cho vi điều khiển thì đèn tắt

    + Cho tới khi nhấn nút bấm, vi điều khiển mới hoạt động như sau:

    • Nếu nhấn nút, nháy led sáng 0,5s; tắt 0.5s

    * Nếu nhả nút, nháy led sáng 0,25s /tắt

    1. Chào em,
      Giả sử, chúng ta có sơ đồ mạch arduino, button và led như bên dưới:
      Sơ đồ mạch Arduino, button và led
      Đoạn code bên dưới giúp xử lý theo yêu cầu của em.
      int led = 9; //chân kết nối với led
      int button = 5; //chân kết nối button
      int ledState = LOW; //khai báo biến lưu trạng thái của led
      unsigned long previousMillis = 0;
      int pressButton = 0; //0 - chưa nhấn button, 1 - đã nhấn button
      void setup() {
      pinMode(led, OUTPUT); //khai báo chân led là ngõ ra
      }
      void loop() {
      unsigned long currentMillis = millis();
      //lấy trạng thái hiện tại của button
      int curStateButton = digitalRead(button);
      if (curStateButton == HIGH) {
      pressButton = 1;
      if (currentMillis - previousMillis >= 500) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
      ledState = HIGH; // Đổi trạng thái led
      } else {
      ledState = LOW; // Đổi trạng thái led
      }
      digitalWrite(led, ledState);
      }
      } else {
      if (pressButton == 1) {
      if (currentMillis - previousMillis >= 250) {
      previousMillis = currentMillis;
      if (ledState == LOW) {
      ledState = HIGH; // Đổi trạng thái led
      } else {
      ledState = LOW; // Đổi trạng thái led
      }
      digitalWrite(led, ledState);
      }
      }
      }
      }

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.