Việc đưa hệ thống về trạng thái ban đầu được ứng dụng rất nhiều và hiệu quả cũng rất cao. Board mạch Arduino cũng là một hệ thống nhỏ với chip MCU ATmega cho nên việc reset hệ thống là hoàn toàn khả thi.
3 cách reset Arduino
Cách 1: Tương tác vào chân Reset của Arduino
Arduino được điều khiển bởi một trong các con chip dòng Atmega của hãng Atmels. Các con chip MCU đều có chân reset, nếu chân reset được cài đặt vè 0 tức là xung nhận là LOW thì MCU tự động ngắt và chạy lại từ đầu còn bình thường chân này ta sẽ cài đặt là HIGH. Việc cần làm là gán một chân vào cổng Reset trên Board thông qua một con trở 10 ngàn ôm. Thông qua con trở 10 ngàn ôm nhằm đảm bảo an toàn cho Board mạch. Trong ví dụ dùng chân số 8.

void resetBoard() { digitalWrite(8, LOW); } void setup() { pinMode(8, OUTPUT); digitalWrite(8, HIGH); } void loop() { resetBoard(); }
Việc này có thể dẫn đến vòng lặp reset vô hạn vì tùy thuộc và con chip trên Board Arduino khác nhau. Chân cài đặt để điều khiển reset có thể được trả về LOW liên tục sau khi lệnh reset đầu tiên được thực thi.
Cách 2: Sử dụng thư viện có sẵn
Phương pháp Watchdog Reset - nếu đang thao tác trên Arduino thì Arduino có một thư viện có sẵn đó là wdt.h
. Với câu lệnh wdt_enable()
và các thông số:
- DTO_15MS
- WDTO_30MS
- WDTO_60MS
- WDTO_120MS
- WDTO_250MS
- WDTO_500MS
- WDTO_1S
- WDTO_2S
- WDTO_4S
- WDTO_8S
Tượng trưng cho 15 mili giây tới 8 giây là thời gian đợi trước khi thực sự reset Board Arduino.
#include <avr/wdt.h> void resetBoard( uint8_t time) { wdt_enable(time); while(1) {} } void setup() { } void loop() { resetBoard( WDTO_60MS); }
Cách 3: Không sử dụng Assembly
Arduino cho phép nhúng code ngôn ngữ Assembly, có thể khiến chương trình reset bằng cách chuyển con trỏ lệnh trực tiếp đến dòng lệnh đầu tiên của chương trình bằng lệnh jmp 0
.
void resetBoard() { asm volatile ("jmp 0"); }