Cuprins:

Arduino - întrerupere periodică: 4 pași
Arduino - întrerupere periodică: 4 pași

Video: Arduino - întrerupere periodică: 4 pași

Video: Arduino - întrerupere periodică: 4 pași
Video: Modul Senzor Lumina - intensitate luminoasă 2024, Noiembrie
Anonim
Arduino - întrerupere periodică
Arduino - întrerupere periodică

Acest instructabil este despre utilizarea unei întreruperi periodice pentru sincronizarea în programele Arduino. Acesta este un pas pentru un programator Arduino în devenire, care știe că Arduino poate face mai mult, dar nu știe cum să facă acest lucru.

Dacă există o problemă de performanță, presupun că utilizați una sau mai multe funcții delay (). Trucul este să scapi de funcția (funcțiile) delay () și să înlocuiești o întrerupere. Funcția delay () îl forțează pe Arduino să nu facă nimic în timp ce așteaptă finalizarea delay (). Utilizarea unei întreruperi permite programului dvs. să facă alte lucruri în așteptarea sfârșitului întârzierii. De obicei, există o cantitate imensă de timp mort neutilizat care ar putea fi folosit pentru alte lucruri atunci când se utilizează delay (). Utilizarea unei întreruperi rezolvă această problemă.

Pasul 1: Manipularea întreruperii

1. Adăugați programul de gestionare a întreruperilor. Doar copiați și lipiți undeva deasupra setării ();

const unsigned long TIMER0_COUNT = 500; // Interval temporizator 500 msec

// TIMER0 manipulare întreruperi volatile bool time = false; ISR (TIMER0_COMPA_vect) {număr nesemnificat static lung = 0; if (++ count> TIMER0_COUNT) {count = 0; timp = adevărat; // timpul este setat la adevărat la fiecare TIMER0_COUNT ms} // (timpul trebuie eliminat în rutina principală)}

Pasul 2: Setați intervalul de timp periodic

2. Setați intervalul de timp. Această rutină piggyback se întoarce pe întreruperea TIMER0, care este setată să declanșeze la fiecare ~ 1 msec.

„Intervalul” dvs. este numărul de întreruperi TIMER0 pentru procesare. Fiecare interval este de ~ 1 msec, deci stabiliți cu adevărat câte întreruperi TIMER0 trebuie calculate înainte de a vă activa intervalul. IOW, setați variabila TIMER0_COUNT la oricât de multe milisecunde doriți să așteptați. De exemplu, utilizați 500 pentru o jumătate de secundă. Folosiți 3000 timp de 3 secunde.

Pasul 3: inițializarea întreruperii

3. Adăugați codul „TIMER0 initialization” la metoda dvs. setup (). Din nou, doar copiați și inserați în setup ().

// *** inițializare TIMER0 ***

cli (); // opriți toate întreruperile TIMSK0 = 0; // opriți timer0 pentru jitter inferior OCR0A = 0xBB; // număr de întreruperi arbitrare TIMSK0 | = _BV (OCIE0A); // piggy back on interrupt sei (); // activează întreruperile din nou

Pasul 4: Unde să adăugați codul

4. Adăugați codul de „verificare a timpului” la metoda loop (). Copiați și lipiți în buclă ().

dacă (timp) {

timp = fals; // face ceva aici}

„Timpul = fals;” linia este importantă. Fără această linie, liniile „faceți ceva aici” ar fi executate de fiecare dată când programul execută loop ().

Desigur, vă înlocuiți propriile activități în linia „faceți ceva aici”. Începeți cu tipărirea unui text sau cu aprinderea LED-ului.

Ați terminat!

Recomandat: