Tartalomjegyzék:

Arduino - időszakos megszakítás: 4 lépés
Arduino - időszakos megszakítás: 4 lépés

Videó: Arduino - időszakos megszakítás: 4 lépés

Videó: Arduino - időszakos megszakítás: 4 lépés
Videó: Could this tiny tube of metal fix our broken suspension? - Edd China's Workshop Diaries 28 2024, November
Anonim
Arduino - időszakos megszakítás
Arduino - időszakos megszakítás

Ez az utasítás az időszakos megszakítás használatáról szól az Arduino programok időzítéséhez. Ez egy lépés egy kezdő Arduino programozó számára, aki tudja, hogy az Arduino többre képes, de nem egészen tudja, hogyan tegye ezt meg.

Ha teljesítményprobléma merül fel, feltételezem, hogy egy vagy több delay () függvényt használ. A trükk az, hogy megszabaduljon a delay () függvény (ek) től, és helyettesítse a megszakítást. A delay () függvény arra kényszeríti az Arduino -t, hogy ne tegyen semmit, amíg várja a delay () befejeződését. A megszakítás használata lehetővé teszi a program számára, hogy a késleltetés végére várva mást tegyen. Általában hatalmas mennyiségű fel nem használt holtidő áll rendelkezésre, amelyet más célokra is fel lehet használni a késleltetés () használatakor. A megszakítás használata megoldja ezt a problémát.

1. lépés: A kezelő megszakítása

1. Adja hozzá a megszakításkezelőt a programjához. Csak másolja és illessze be valahova a setup () fölé;

const unsigned long TIMER0_COUNT = 500; // 500 ms időzítő intervallum

// TIMER0 megszakításkezelő illékony bool time = false; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; if (++ count> TIMER0_COUNT) {count = 0; idő = igaz; // az idő minden TIMER0_COUNT ms -os értékre van állítva} // (az időt a fő rutinban kell törölni)}

2. lépés: Állítsa be az időszakos időintervallumot

2. Állítsa be az időintervallumot. Ez a rutin malackodik a TIMER0 megszakításhoz, amely ~ 1 ms -onként tűzre van állítva.

Az "intervallum" a feldolgozandó TIMER0 megszakítások száma. Minden intervallum ~ 1 ms, tehát valóban beállítja, hogy hány TIMER0 megszakítást számítson az intervallum aktiválása előtt. IOW, állítsa be a TIMER0_COUNT változót, hogy hány milliszekundumig várjon. Például használjon 500 -at egy másodperc felére. Használjon 3000 -et 3 másodpercig.

3. lépés: Az inicializálás megszakítása

3. Adja hozzá a "TIMER0 inicializálás" kódot a setup () módszerhez. Ismét csak másolja és illessze be a setup () -ba.

// *** TIMER0 inicializálása ***

cli (); // minden megszakítás kikapcsolása TIMSK0 = 0; // kikapcsolja az időzítőt0 alacsonyabb rezgés esetén OCR0A = 0xBB; // tetszőleges megszakítások száma TIMSK0 | = _BV (OCIE0A); // malacka vissza a megszakításra sei (); // a turn megszakítja a bekapcsolást

4. lépés: Hová kell hozzáadni a kódot

4. Adja hozzá az "időellenőrzés" kódot a loop () metódusához. Másolja és illessze be a hurokba ().

ha (idő) {

idő = hamis; // csinálj itt valamit}

Az "idő = hamis;" vonal fontos. E sor nélkül a "csinálj valamit itt" sor (ok) minden alkalommal végrehajtásra kerülnek, amikor a program végrehajtja a ciklust ().

Természetesen a "tegyél valamit itt" sorban helyettesítheted saját tevékenységeidet. Kezdje a szöveg nyomtatásával vagy a LED villogásával.

Végeztél!

Ajánlott: