Cách reset board Arduino bằng phần mềm để giúp các dự án lọc nhiễu

I. Giới thiệu

Trong thực tế, có rất nhiều trường hợp cần phải reset mạch Arduino để giải quyết vấn đề. Ví dụ như: nhiễu điện khi dùng module NRF24L01 hoặc module 315MHz. Trong bài viết này mình sẽ hướng dẫn các bạn reset board mạch Arduino từ các dòng code trong Arduino để các bạn có thể "tự động reset" board để tự "giải nhiễu".

II. Các cách để reset board Arduino

1. Reset bằng cách điều khiển chân RST (reset)

Chúng ta sẽ dùng một chân bất kỳ trên Arduino và cài đặt nó thành một chân OUTPUT.  Và khi bạn digitalWrite LOW vào chân đó thì board sẽ được reset. Để dễ hiểu, bạn xem hình sau.

Mình sẽ làm blink con led 13 và reset board Arduino.

int led = 13;//chân led 13
int resetPin = 12;//chân reset
void setup() {  
  digitalWrite(resetPin, HIGH);//bật chân reset lên HIGH (khi có pinMode output thì nó sẽ đặt là HIGH thay vì LOW như mặc định), luôn luôn để dòng này đầu tiên.
  pinMode(resetPin, OUTPUT);  //pinMode output cho chân reset
  
  delay(200);
  
  //khởi tạo serial port
  pinMode(led, OUTPUT);  
  Serial.begin(9600);//initialize Serial Port
  delay(200);
}

void loop() {
  delay(10);
  digitalWrite(led, HIGH);  
  Serial.println("bat");
  delay(1000);              
  digitalWrite(led, LOW);   
  Serial.println("tat");
  delay(1000);              
  Serial.println("resetting");
  delay(10);
  digitalWrite(resetPin, LOW);//tiến hành reset
  Serial.println("chay duoc chet lien");
  //trong dòng loop sẽ không bao giờ chạy được vì board arduino đa reset

}

2. Chỉ sử dụng phần mềm thôi (nên dùng)

Bạn không cần làm gì nhiều, chúng ta chỉ việc khai báo một con trỏ hàm dùng cho reset bằng cách khai báo địa chỉ ô nhớ nó trỏ về là 0. Phức tạp ha? Nhưng nếu là newbie thì bạn chỉ cần đặt tên hàm như sau và gọi nó khi cần reset là được!

...

void(* resetFunc) (void) = 0;//cài đặt hàm reset

....

resetFunc(); // reset

Ví dụ:

int led = 13;//chân led 13
void setup() {  
  //khởi tạo serial port
  pinMode(led, OUTPUT);  
  Serial.begin(9600);
  delay(200);
}

void(* resetFunc) (void) = 0;//cài đặt hàm reset

void loop() {
  delay(10);
  digitalWrite(led, HIGH);  
  Serial.println("bat");
  delay(1000);              
  digitalWrite(led, LOW);   
  Serial.println("tat");
  delay(1000);              
  Serial.println("resetting");
  delay(10);
  resetFunc();//tiến hành reset
  Serial.println("chay duoc chet lien");
  //trong dòng loop sẽ không bao giờ chạy được vì board arduino đa reset

}

III. Lời kết

Chúc các bạn tránh bị tình trạng đau đầu khi debug NRF24L01, vì sao? Vì bạn có thể kiểm tra lần cuối cùng nhận được dữ liệu và sau đó gọi hàm reset nếu thời gian cuối nhận được lớn quá một ngưỡng nào đó (Ví dụ 1 phút). 

Chúc các bạn thành công!

lên
20 thành viên đã đánh giá bài viết này hữu ích.
Các dự án được truyền cảm hứng

Bộ điều khiển PID - ứng dụng phần 2 - xe dò line dùng thuật toán PID

Tiép nối bài viết về xe dò line cảm ơn Đỗ Hữu Toàn đã viết hộ mình phần 4. hôm nay mình sẽ làm cho chiếc xe dò line đi mượt và có hồn hơn 

lên
34 thành viên đã đánh giá bài viết này hữu ích.
Các bài viết cùng tác giả

Hướng dẫn điều khiển stepper 28BYJ-48 bằng mạch điều khiển động cơ bước ULN2003

Động cơ bước 28BYJ-48 có đến 5 dây chứ không phải thuộc loại 4 dây hoặc 6 dây như ta thường thấy. Nhưng thật may mắn, chúng ta lại có board điều khiển động cơ bước ULN2003 với 5 giây vừa khít với con động cơ bước này luôn. Vì vậy, bộ động cơ bước + stepper driver này thường được dùng trong các dự án DIY. Hôm nay, mình sẽ chỉ các bạn cách sử dụng thư viện để sử dụng bộ combo này cho dễ nhé.

lên
34 thành viên đã đánh giá bài viết này hữu ích.

Breadboard là gì? Vì sao khi dùng Arduino lại cần breadboard

Lúc mình mới học về Arduino thì ngoài khái niệm về Arduino, thì mình còn gặp thêm một khái niệm mới nữa là breadboard. Khái niệm này cũng không quá khó, nhưng để giúp các bạn mới học đỡ phải tìm kiếm google (yêu hàng Việt) nên mình xin mạn phép viết ngắn lại giúp các bạn mới tiếp cận với Arduino có thể rút ngắn thời gian tìm tòi?

lên
27 thành viên đã đánh giá bài viết này hữu ích.
Từ khóa: