Mündəricat:

Arduino - Dövri fasilə: 4 addım
Arduino - Dövri fasilə: 4 addım

Video: Arduino - Dövri fasilə: 4 addım

Video: Arduino - Dövri fasilə: 4 addım
Video: Кто-нибудь из вас слышал о полуночной игре? Страшные истории. Мистика. Ужасы 2024, Iyul
Anonim
Arduino - Dövri fasilə
Arduino - Dövri fasilə

Bu Təlimat, Arduino proqramlarında vaxt təyin etmək üçün dövri bir fasilə istifadə etməkdir. Bu, Arduinonun daha çox şey edə biləcəyini bilən, lakin bunun necə baş verəcəyini tam bilməyən yeni başlayan bir Arduino proqramçısı üçün bir addımdır.

Bir performans problemi varsa, bir və ya daha çox delay () funksiyasından istifadə etdiyinizi düşünürəm. Hiylə gecikmə () funksiyalarından qurtulmaq və kəsilməni əvəz etməkdir. Delay () funksiyası, Arduino'yu gecikmənin () tamamlanmasını gözləyərkən heç bir şey etməməyə məcbur edir. Bir fasilə istifadə etmək, gecikmənin bitməsini gözləyərkən proqramınızın başqa işlər görməsinə imkan verir. Gecikmə () istifadə edərkən başqa şeylər üçün istifadə oluna biləcək çoxlu istifadə olunmamış ölü vaxt var. Bir fasilənin istifadəsi bu problemi həll edir.

Addım 1: İşi kəsin

1. Proqramınıza kəsmə işləyicisini əlavə edin. Yalnız quraşdırma () yuxarıdakı bir yerə kopyalayın və yapışdırın;

const imzasız uzun TIMER0_COUNT = 500; // 500 msn zamanlayıcı aralığı

// TIMER0 interrupt handler uçucu bool zamanı = yalan; ISR (TIMER0_COMPA_vect) {statik işarəsiz uzun say = 0; əgər (++ say> TIMER0_COUNT) {count = 0; vaxt = doğru; // vaxt hər TIMER0_COUNT ms} doğru olaraq təyin olunur // (əsas rutində vaxtın silinməsi lazımdır)}

Addım 2: Dövri Zaman Aralığını təyin edin

2. Vaxt aralığını təyin edin. Bu qayda hər ~ 1 msn -də atəşə tutulan TIMER0 ara verməsinə geri dönür.

Sizin "intervalınız" emal etmək üçün TIMER0 kəsilmələrinin sayıdır. Hər interval ~ 1 msn -dir, buna görə aralığınızı aktivləşdirməzdən əvvəl neçə TIMER0 fasiləsinin sayılacağını həqiqətən təyin edirsiniz. IOW, TIMER0_COUNT dəyişənini gözləmək istədiyiniz qədər milisaniyəyə təyin edin. Məsələn, saniyənin yarısı üçün 500 istifadə edin. 3000 saniyəni 3 saniyə istifadə edin.

Addım 3: Başlatmanı kəsin

3. "TIMER0 başlatma" kodunu setup () metodunuza əlavə edin. Yenə də kopyalayıb yapışdırın ().

// *** TIMER0 başlanğıc ***

cli (); // bütün fasilələri söndür TIMSK0 = 0; // aşağı sarsıntı üçün timer0 söndürün OCR0A = 0xBB; // ixtiyari kəsilmə sayı TIMSK0 | = _BV (OCIE0A); // donuz geri inter sei (); // növbəni kəsin

Addım 4: Kodunuzu hara əlavə etməlisiniz

4. "time check" kodunu loop () metodunuza əlavə edin. Kopyalayın və döngəyə yapışdırın ().

əgər (vaxt) {

vaxt = yalan; // burada bir şey et}

"Zaman = yalan;" xətti vacibdir. Bu sətir olmasaydı, proqram hər dəfə loop () icra etdikdə "burada bir şey et" sətirləri icra olunur.

Əlbəttə ki, "burada bir şey et" xəttində öz fəaliyyətinizi əvəz edirsiniz. Bir az mətn çap etmək və ya LED -i yandırmaqla başlayın.

Bitirdin!

Tövsiyə: