Satura rādītājs:

Arduino - periodisks pārtraukums: 4 soļi
Arduino - periodisks pārtraukums: 4 soļi

Video: Arduino - periodisks pārtraukums: 4 soļi

Video: Arduino - periodisks pārtraukums: 4 soļi
Video: Lesson 12: Using Arduino Programming function and switch | SunFounder Robojax 2024, Jūlijs
Anonim
Arduino - periodisks pārtraukums
Arduino - periodisks pārtraukums

Šī pamācība attiecas uz periodiska pārtraukuma izmantošanu laika noteikšanai Arduino programmās. Tas ir solis topošajam Arduino programmētājam, kurš zina, ka Arduino var darīt vairāk, bet nezina, kā to panākt.

Ja ir veiktspējas problēma, es pieņemu, ka izmantojat vienu vai vairākas delay () funkcijas. Viltība ir atbrīvoties no aizkavēšanās () funkcijas (-ēm) un aizstāt pārtraukumu. Funkcija delay () liek Arduino neko nedarīt, gaidot kavēšanās () pabeigšanu. Pārtraukuma izmantošana ļauj jūsu programmai veikt citas darbības, gaidot kavēšanās beigas. Parasti, izmantojot aizkavi (), ir milzīgs neizmantots miris laiks, ko varētu izmantot citām lietām. Pārtraukuma izmantošana atrisina šo problēmu.

1. darbība: pārtrauciet apstrādātāju

1. Pievienojiet savai programmai pārtraukumu apstrādātāju. Vienkārši nokopējiet un ielīmējiet kaut kur virs iestatīšanas ();

const unsigned long TIMER0_COUNT = 500; // 500 ms taimera intervāls

// TIMER0 pārtraukšanas apstrādātājs gaistošais bool laiks = nepatiess; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; ja (++ skaits> TIMER0_COUNT) {skaits = 0; laiks = taisnība; // laiks tiek iestatīts uz patiesu ik pēc TIMER0_COUNT ms} // (laiks jātīra galvenajā režīmā)}

2. darbība: iestatiet periodisko laika intervālu

2. Iestatiet laika intervālu. Šī parastā cūciņa atgriežas TIMER0 pārtraukumā, kas tiek aktivizēts ik pēc ~ 1 ms.

Jūsu “intervāls” ir apstrādājamo TIMER0 pārtraukumu skaits. Katrs intervāls ir ~ 1 ms, tāpēc jūs patiešām iestatāt, cik TIMER0 pārtraukumu jāskaita pirms intervāla aktivizēšanas. IOW, iestatiet mainīgo TIMER0_COUNT uz tik daudzām milisekundēm, kādas vēlaties gaidīt. Piemēram, vienu sekundi izmantojiet 500. Izmantojiet 3000 3 sekundes.

3. darbība. Pārtraukt inicializāciju

3. Pievienojiet iestatīšanas () metodei kodu "TIMER0 inicializācija". Atkal, vienkārši nokopējiet un ielīmējiet iestatījumos ().

// *** TIMER0 inicializēšana ***

cli (); // izslēgt visus pārtraukumus TIMSK0 = 0; // izslēgt taimeri0 zemākam nervozētājam OCR0A = 0xBB; // patvaļīgs pārtraukumu skaits TIMSK0 | = _BV (OCIE0A); // cūciņa atpakaļ uz pārtraukuma sei (); // ieslēgt pārtraukumus atpakaļ

4. darbība: kur pievienot kodu

4. Pievienojiet "laika pārbaudes" kodu savai cilpas () metodei. Kopējiet un ielīmējiet cilpā ().

ja (laiks) {

laiks = nepatiess; // dari kaut ko šeit}

"Laiks = nepatiess;" līnija ir svarīga. Bez šīs rindas rindiņa "kaut ko darīt šeit" tiktu izpildīta katru reizi, kad programma izpilda cilpu ().

Protams, jūs aizstājat savas darbības rindā "dari kaut ko šeit". Sāciet ar teksta drukāšanu vai gaismas diodes mirgošanu.

Jūs esat pabeidzis!

Ieteicams: