Përmbajtje:

Arduino - Ndërprerje periodike: 4 hapa
Arduino - Ndërprerje periodike: 4 hapa

Video: Arduino - Ndërprerje periodike: 4 hapa

Video: Arduino - Ndërprerje periodike: 4 hapa
Video: VL53L1X Лазерный дистанционный датчик времени полета 400 см 2024, Nëntor
Anonim
Arduino - Ndërprerje periodike
Arduino - Ndërprerje periodike

Ky udhëzues ka të bëjë me përdorimin e një ndërprerje periodike për kohën në programet Arduino. Ky është një hap për një programues fillestar Arduino i cili e di se Arduino mund të bëjë më shumë, por nuk e di se si ta bëjë këtë të ndodhë.

Nëse ka një problem të performancës, unë supozoj se jeni duke përdorur një ose më shumë funksione të vonesës (). Truku është të heqësh qafe funksionin (t) e vonesës dhe të zëvendësosh një ndërprerje. Funksioni i vonesës () e detyron Arduino të mos bëjë asgjë ndërsa pret që vonesa () të përfundojë. Përdorimi i një ndërprerjeje lejon programin tuaj të bëjë gjëra të tjera ndërsa prisni fundin e vonesës. Zakonisht ekziston një sasi e madhe e kohës së vdekur të papërdorur që mund të përdoret për gjëra të tjera kur përdorni vonesën (). Përdorimi i një ndërprerjeje zgjidh këtë problem.

Hapi 1: Ndërprerësi i Trajtuesit

1. Shtoni mbajtësin e ndërprerjeve në programin tuaj. Thjesht kopjoni dhe ngjisni diku mbi konfigurimin ();

const i panënshkruar i gjatë TIMER0_COUNT = 500; // Intervali i kohëmatësit 500 msec

// TIMER0 interrupt handler volatile bool time = false; ISR (TIMER0_COMPA_vect) {numërim i gjatë i panënshkruar statik = 0; nëse (++ numërimi> TIMER0_COUNT) {numërimi = 0; koha = e vërtetë; // koha është caktuar si e vërtetë çdo TIMER0_COUNT ms} // (koha duhet të pastrohet në rutinën kryesore)}

Hapi 2: Vendosni intervalin kohor periodik

2. Vendosni intervalin kohor. Kjo derrkuc rutinë kthehet vetë në ndërprerjen TIMER0, e cila do të ndizet çdo 1 se sekondë.

"Intervali" juaj është numri i ndërprerjeve TIMER0 për t'u përpunuar. Çdo interval është m 1 msec, kështu që ju vërtet vendosni se sa ndërprerje TIMER0 do të numërohen para se të aktivizoni intervalin tuaj. IOW, vendosni ndryshoren TIMER0_COUNT në sa milisekonda që dëshironi të prisni. Për shembull, përdorni 500 për gjysmën e sekondës. Përdorni 3000 për 3 sekonda.

Hapi 3: Fillimi i ndërprerjes

3. Shtoni kodin "fillimi TIMER0" në metodën tuaj të konfigurimit (). Përsëri, thjesht kopjoni dhe ngjisni në konfigurim ().

// *** Nisja e TIMER0 ***

cli (); // fik të gjitha ndërprerjet TIMSK0 = 0; // fikni kohëmatësin0 për jitter më të ulët OCR0A = 0xBB; // numërimi arbitrar i ndërprerjeve TIMSK0 | = _BV (OCIE0A); // derrkuc përsëri në ndërprerjen sei (); // aktivizoni përsëri ndërprerjet

Hapi 4: Ku të shtoni kodin tuaj

4. Shtoni kodin "kontrolloni kohën" në metodën tuaj loop (). Kopjoni dhe ngjisni në lak ().

nëse (koha) {

koha = e rreme; // bëj diçka këtu}

"Koha = e rreme;" linja është e rëndësishme. Pa këtë rresht linja (t) "bëj diçka këtu" do të ekzekutohej sa herë që programi ekzekuton loop ().

Sigurisht, ju zëvendësoni aktivitetet tuaja në linjën "bëni diçka këtu". Filloni me printimin e një teksti ose ndezjen e LED.

Mbarove!

Recommended: