Mục lục:

Arduino - Ngắt định kỳ: 4 bước
Arduino - Ngắt định kỳ: 4 bước

Video: Arduino - Ngắt định kỳ: 4 bước

Video: Arduino - Ngắt định kỳ: 4 bước
Video: Thực Hành Ngắt Ngoài Với Arduino Uno R3 | Điện tử DAT 2024, Tháng bảy
Anonim
Arduino - Ngắt định kỳ
Arduino - Ngắt định kỳ

Có thể hướng dẫn này về việc sử dụng ngắt định kỳ để định thời gian trong các chương trình Arduino. Đây là một bước cho một lập trình viên Arduino mới chớm nở, những người biết rằng Arduino có thể làm được nhiều hơn thế, nhưng không biết làm thế nào để biến điều đó thành hiện thực.

Nếu có vấn đề về hiệu suất, tôi giả sử rằng bạn đang sử dụng một hoặc nhiều hàm delay (). Bí quyết là loại bỏ (các) hàm delay () và thay thế một ngắt. Hàm delay () buộc Arduino không làm gì trong khi đợi hoàn thành delay (). Sử dụng ngắt cho phép chương trình của bạn làm những việc khác trong khi chờ hết thời gian trễ. Thường có một lượng lớn thời gian chết không sử dụng có thể được sử dụng cho những việc khác khi sử dụng delay (). Sử dụng một ngắt giải quyết vấn đề này.

Bước 1: Xử lý ngắt

1. Thêm trình xử lý ngắt vào chương trình của bạn. Chỉ cần sao chép và dán vào một nơi nào đó phía trên setup ();

const unsigned long TIMER0_COUNT = 500; // Khoảng thời gian hẹn giờ 500 msec

// Trình xử lý ngắt TIMER0 flight bool time = false; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; if (++ count> TIMER0_COUNT) {count = 0; thời gian = true; // thời gian được đặt thành true mỗi TIMER0_COUNT ms} // (thời gian cần được xóa trong quy trình chính)}

Bước 2: Đặt khoảng thời gian định kỳ

2. Đặt khoảng thời gian. Quy trình này tự cõng vào ngắt TIMER0, ngắt này được thiết lập để kích hoạt sau mỗi ~ 1 mili giây.

"Khoảng thời gian" của bạn là số lần ngắt TIMER0 để xử lý. Mỗi khoảng thời gian là ~ 1 msec, vì vậy bạn thực sự đang đặt số lượng ngắt TIMER0 để đếm trước khi kích hoạt khoảng thời gian của mình. IOW, đặt biến TIMER0_COUNT thành tuy nhiên bạn muốn đợi bao nhiêu mili giây. Ví dụ: sử dụng 500 cho một nửa giây. Sử dụng 3000 trong 3 giây.

Bước 3: Khởi tạo ngắt

3. Thêm mã "khởi tạo TIMER0" vào phương thức setup () của bạn. Một lần nữa, chỉ cần sao chép và dán vào setup ().

// *** Khởi tạo TIMER0 ***

cli (); // tắt tất cả các ngắt TIMSK0 = 0; // tắt timer0 cho jitter thấp hơn OCR0A = 0xBB; // đếm ngắt tùy ý TIMSK0 | = _BV (OCIE0A); // heo quay lại ngắt sei (); // bật lại ngắt

Bước 4: Nơi thêm mã của bạn

4. Thêm mã "kiểm tra thời gian" vào phương thức loop () của bạn. Sao chép và dán vào vòng lặp ().

nếu (thời gian) {

thời gian = sai; // làm gì đó ở đây}

Dấu "time = false;" dòng là quan trọng. Nếu không có dòng này, (các) dòng "làm gì đó ở đây" sẽ được thực thi mỗi khi chương trình thực hiện loop ().

Tất nhiên, bạn thay thế các hoạt động của riêng bạn trong dòng "làm điều gì đó ở đây". Bắt đầu với việc in một số văn bản hoặc nhấp nháy đèn LED.

Bạn đã hoàn tất!

Đề xuất: