Cách Reset Arduino - Phần 2

I. Giới thiệu

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 ATmega cho nên việc reset hệ thống là hoàn toàn khả thi!!!

Trong bài viết của ban Tôi Yêu Arduino : Cách reset board Arduino bằng phần mềm để giúp các dự án lọc nhiễu , bạn có giới thiệu cách Reset Arduino. Nhưng mình thấy vẫn còn thiếu sót...Nên bài viết này sẽ bổ sung thêm những cách Reset Arduino độc và lạ hơn!!!

II. Các cách để Reset Arduino

1. Tương tác vào chân Reset của Arduino

Như các bạn đã biết...khi chúng ta ấn nút reset trên board Arduino thì nó tương đương với việc bạn nối trực tiếp chân Reset trên board vào chân GND thông qua điện trở 10K Ôm. Vì vậy, muốn Reset board bằng Code các bạn có thể nối chân Reset vào 1 chân tín hiệu và biến chân tín hiệu đó thành GND...!!!!

Bạn sẽ tự tạo cho mình một hàm Reset...và trong chương trình...nếu cần Reset bạn chỉ cần gọi hàm này ra:

 void setup()
{ 
  pinMode( 8, OUTPUT);
  digitalWrite( 8, HIGH);
}
 
void loop()
{
  Reset();
}
void Reset()
{
  digitalWrite( 8, LOW);
}

2. Sử dụng thư viện có sẵn ( cái này đi sưu tầm thôi )

Có một phương pháp để reset hệ thống thiết bị mà người ta gọi đó là Watchdog Reset. Nếu bạn đ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);
}

3. Sử dụng Code:

Arduino cho phép bạn nhúng code ngôn ngữ Assembly vậy ta có thể khiến chương trình “reset” bằng cách cho “nhảy” đến dòng code đầu tiên của chương trình. Theo như mình biết Assembly có câu lệnh nhảy jmp và nhảy đến dòng code 0. :v 

void ResetBoard()
{
  asm volatile ( "jmp 0");  
}

III. Kết luận

Các bạn có cảm thấy đơn giản hơn không ạ??? Chỉ với vài dòng Code ngắn gọn...Bạn đã có thể Reset Board trực tiếp = code của mình rồi!!! Chúc các bạn thành công!!!!

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

Shortcut02 - Điều khiển Servo từ xa thông qua biến trở

Đây là loạt bài vắn tắt chia sẻ kinh nghiệm giúp các bạn có thể sử dụng các mudule cũng như tiếp cận code một cách ngắn gọn và dễ hiểu hơn smiley

Mục đích bài viết: Hướng dẫn điều khiển một Servo trong các dự án robot từ xa thông qua module NRF24 bằng biến trở cool

lên
11 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ả

Cài đặt Microsoft Visual C#

Ở loạt bài giao tiếp giữa Arduino của mình, mình có hướng dẫn các bạn cách lập trình phần mềm thông qua công cụ Microsoft Visual C#. Nhưng có nhiều bạn gặp khó khăn trong quá trình cài đặt công cụ, hoặc cho rằng nó quá mất thời gian....Vì vậy, mình làm bài viết này để hướng dẫn lại các bạn cách cài đặt Microsoft Visual C# một cách dễ dàng và cách sử dụng nó.

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

Điều khiển thiết bị bằng tin nhắn dùng SIM900A với tập lệnh AT

Module SIM900a là một giải pháp toàn diện cho việc điều khiển và giám sát thiết bị từ xa. Đại khái là module SIM900A được coi như 1 em nokia 1280 với chức năng nghe gọi, nhắn tin, GPRS,...Sau một thời gian dài gác phím, hôm nay, mình sẽ chia sẻ cách dùng module SIM900a đọc cú pháp tin nhắn gửi đến và điều khiển thiết bị sử dụng tập lệnh AT nhé laugh

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