HƯỚNG DẪN CHỐNG DỘI NÚT NHẤN

Arduino Shop gởi đến các bạn một ngày mới vui vẻ, hạnh phúc. Hôm nay, Arduino Shop sẽ hướng dẫn mọi người chống dội nút nhấn. Việc chống dội cho nút nhấn, mình có thể phối hợp 2 phương pháp phần cứng lẫn phần mềm. Ở đây, Arduino Shop chỉ tập trung vào phần chống dội nút nhấn bằng phần mềm. Nào, Chúng ta cùng nhau làm nhé!

Ngày đăng: 09-10-2016

6,548 lượt xem

1. ĐẶT VẤN ĐỀ

Thực tế, khi chúng ta làm một đề tài về nút nhấn và không tìm hiểu kỹ đôi lúc sẽ xảy ra sự cố như: mình nhấn nút chỉ có 1 lần nhưng số đếm cứ tăng một hồi rồi mới dừng, hoặc đôi khi không nhân nút nhưng số đếm vẫn được tăng lên, điều đó là do sao vậy? Thực ra, nguyên nhân là do tính chất vật lý của nút nhấn, các bạn để ý, với nút nhấn sẽ có lò xo. Khi bạn nhấn nút thì lò xo đó không nhanh bằng so với tín hiệu điện, mặt dù chúng ta cảm nhận là đã nhả nút nhưng thực tế, chỉ vài chục miligiay trước khi bạn nhả nút thì nút nhấn vẫn còn trạng thái dính. Hoặc khi bạn nhấn nút xuống, không ngay lập tức nút nhấn được tiếp xúc hết mà chỉ tiếp xúc 1 phần, điều này làm tín hiệu bị méo mó, gây ra nhiễu gọi là debounce. Dưới đây, Arduino Shop xin giới thiệu đến bạn 2 giải pháp chống dội( nhiễu) cho nút nhấn bằng phần mềm.

2. 2 Phương pháp chống nhiễu cho nút nhấn bằng phần mềm

2.1. Bạn sử dụng thư viện chống dội trong phần mềm Arduino IDE. 

Để thực hiện phương pháp này, bạn cần phải cài thư viện #include <Button.h>

Để cài được thư viện này, các bạn thực hiện các bước như bên dưới:

Mở phần mềm IDE ra và chọn vào Sketch --> Add File -->Manage Libraries và gõ cụm từ "button" vào ô Filter your seach và nhấn Enter. Sẽ hiển ra một loạt các thư viện liên quan tới button, và bạn chọn thư viện nào có từ button.

chon-thu-vien

Hướng dẫn cài thư viện

Đến đây, bạn đã có 1 thư viện chống dội cho nút nhấn rồi. Các bạn xem đoạn code bên dưới và tiến hành thực hành với phần cứng của mình nhé.

#include <Button.h> // Khai báo thư viện

Button button1(2); // Kết nối nút nhấn thứ 2 của bạn với GND
Button button2(3); // Kết nối nút nhấn thứ 3 của bạn với GND
Button button3(4); // Kết nối nút nhấn thứ 4 của bạn với GND

void setup() {
button1.begin();
button2.begin();
button3.begin();

while (!Serial) { }; 
Serial.begin(9600);
}

void loop() {
if (button1.pressed())
  Serial.println("Button 1 pressed"); // Nhấn nhã

if (button2.released())
  Serial.println("Button 2 released"); // Nhẫn giữ

if (button3.toggled()) {
  if (button3.read() == Button::PRESSED)
   Serial.println("Button 3 has been pressed");
  else
   Serial.println("Button 3 has been released");
}
}

2.2. Bạn sử dụng đoạn code bên dưới để hạn chế việc dội của nút nhấn.

Thay vì dùng hàm delay, mình dùng đoạn code này, mục đích giảm tài nguyên cho arduino.Trong ví dụ này, Arduino Shop hướng dẫn dùng nút nhấn để điều khiển 1 cái led tùy theo trạng thái của nút nhấn. Tức là, nút nhấn sẽ làm đèn sáng lên.

Các bạn xem đoạn code bên dưới:

//khai báo biến
const int ledPin = 13; //khai báo chân led là chân số 13
const int buttonPin = 2; //khai báo cho nút nhấn là chân số 2

int buttonState = LOW; //Thể hiện trạng thái nút nhấn, mức thấp(LOW) không nhấn, mức HIGH là nhấn
int ledState = -1; //Thể hiện trạng thái của led, Âm là off, dương là on

long lastDebounceTime = 0; 
long debounceDelay = 50;   


void setup() {

// Thiết lập chân IO cho nút nhấn và led
  pinMode(ledPin, OUTPUT);
  pinMode(buttonPin, INPUT);

}
void loop() {

  buttonState = digitalRead(buttonPin);

  //lọc nhiễu bằng bộ đếm thời gian
  if ( (millis() - lastDebounceTime) > debounceDelay) {

// nếu nút nhấn được nhấn và led chuyển đổi từ off sang on hoặc ngược lại

    if ( (buttonState == HIGH) && (ledState < 0) ) {

      digitalWrite(ledPin, HIGH); //Mở led
      ledState = -ledState; //Lúc này led đã sáng và gán lại giá trị trạng thái cho biến ledState
      lastDebounceTime = millis(); // thiết lập lại thời gian debounce
    }
    else if ( (buttonState == HIGH) && (ledState > 0) ) {

      digitalWrite(ledPin, LOW); //Tắt led
      ledState = -ledState; //Giờ led tắt và cần thay đổi trạng thgasi của biến
      lastDebounceTime = millis();  // thiết lập lại thời gian debounce
    }

  }

}

Để thực test 2 cách chống nhiễu bằng phần mềm như trên, chúng ta cần có phần cứng. Vậy phần cứng là gì, các bạn xem bên dưới và cách xây dựng phần cứng để test nhé.

Linh kiện cần có:

Thứ nhất: Board arduino uno R3

Thứ hai: Nút nhấn/ push button nha các bạn

Thứ 3: Điện trở 10K và điện trở 200 Ôm

Thứ 4: Led

Thứ 5: Board test và day nối

So đồ kết nối như hình bên dưới các bạn nhé:

so- do-noi-day

Sơ đồ nối dây để test

3. KẾT LUẬN

Với phương pháp này, Arduino Shop đã làm một số dự án liên quan tới button và đã thành công. Chúc mọi người thực hành tốt nhé. Shop luôn ghi nhận mọi đánh giá của các bạn về đề tài này. Các bạn cố gắng thực hành thử nhé.

GỌI NGAY - 0902 37 12 52 (Mr Quốc): Tư vấn KT

ĐỂ ĐƯỢC TƯ VẤN VÀ CUNG CẤP GIẢI PHÁP KỊP THỜI CHO BẠN

ARDUINO SHOP

Địa chỉ: Số 41 Gò Dưa, Phường Tam Bình, Quận Thủ Đức, TP. Hồ Chí Minh
Email: arduinoshophcm@gmail.com

Bình luận (0)

Gửi bình luận của bạn

Captcha
<