Talaan ng mga Nilalaman:

Arduino - Pana-panahong Gagambala: 4 na Hakbang
Arduino - Pana-panahong Gagambala: 4 na Hakbang

Video: Arduino - Pana-panahong Gagambala: 4 na Hakbang

Video: Arduino - Pana-panahong Gagambala: 4 na Hakbang
Video: Часы реального времени. Уроки Arduino 2024, Nobyembre
Anonim
Arduino - Pana-panahong Gagambala
Arduino - Pana-panahong Gagambala

Ang Instructable na ito ay tungkol sa paggamit ng isang pana-panahong makagambala para sa tiyempo sa mga programa ng Arduino. Ito ay isang hakbang para sa isang namumuo na Arduino programmer na alam na ang Arduino ay maaaring gumawa ng higit pa, ngunit hindi masyadong alam kung paano ito mangyari.

Kung mayroong isang problema sa pagganap ipinapalagay ko na gumagamit ka ng isa o higit pang mga pagpapaandar () na pagpapaandar. Ang bilis ng kamay ay upang mapupuksa ang (mga) pagpapaandar na pagkaantala at palitan ang isang makagambala. Pinipilit ng pagpapaandar ng () pagpapaandar ang Arduino na walang gawin habang hinihintay ang pagkakatagal () upang makumpleto. Ang paggamit ng isang nakakagambala ay nagbibigay-daan sa iyong programa na gumawa ng ibang mga bagay habang hinihintay ang pagtatapos ng pagkaantala. Karaniwan ay may isang malaking halaga ng hindi nagamit na oras ng patay na maaaring magamit para sa iba pang mga bagay kapag gumagamit ng pagkaantala (). Nalulutas ng paggamit ng isang nakakagambala ang problemang ito.

Hakbang 1: Makagambala sa Handler

1. Idagdag ang makagambala na handler sa iyong programa. Kopyahin at i-paste lamang sa isang lugar sa itaas ng pag-setup ();

hindi pinirmahan ng mahabang TIMER0_COUNT = 500; // 500 msec timer interval

// TIMER0 makagambala ang handler pabagu-bago ng oras ng bool = false; ISR (TIMER0_COMPA_vect) {static unsigned long count = 0; kung (++ count> TIMER0_COUNT) {count = 0; oras = totoo; // oras ay nakatakda sa totoo bawat TIMER0_COUNT ms} // (ang oras ay kailangang i-clear sa pangunahing gawain)}

Hakbang 2: Itakda ang Pansamantalang Pagitan ng Oras

2. Itakda ang agwat ng oras. Ang nakagawian na piggybacks mismo papunta sa makagambala ng TIMER0, na nakatakda sa sunog bawat ~ 1 msec.

Ang iyong "agwat" ay ang bilang ng mga paggambala ng TIMER0 upang iproseso. Ang bawat agwat ay ~ 1 msec, kaya talagang itinatakda mo kung gaano karaming TIMER0 ang gumagambala upang mabilang bago i-aktibo ang iyong agwat. IOW, itakda ang variable TIMER0_COUNT sa gayunpaman maraming mga millisecond na nais mong maghintay. Halimbawa, gumamit ng 500 para sa isang kalahati ng isang segundo. Gumamit ng 3000 sa loob ng 3 segundo.

Hakbang 3: Makagambala sa Simula

3. Idagdag ang "TIMER0 initialization" code sa iyong setup () na pamamaraan. Muli, kopyahin lamang at i-paste sa pag-setup ().

// *** TIMER0 initialization ***

Tala (); // patayin ang lahat ng nakakagambala TIMSK0 = 0; // i-off ang timer0 para sa mas mababang jitter OCR0A = 0xBB; // arbitrary interrupt count TIMSK0 | = _BV (OCIE0A); // piggy back papunta makagambala sei (); // turn interrupts pabalik sa

Hakbang 4: Kung saan idaragdag ang Iyong Code

4. Idagdag ang "time check" code sa iyong loop () na pamamaraan. Kopyahin at i-paste sa loop ().

kung (oras) {

oras = maling; // do something here}

Ang "time = false;" linya ay mahalaga. Nang walang linya na ito ang (gumawa ng isang bagay dito "na linya (s) ay naisakatuparan sa tuwing ang programa ay nagpapatupad ng loop ().

Siyempre, pinapalitan mo ang iyong sariling mga aktibidad sa linya na "gumawa ng isang bagay dito". Magsimula sa pag-print ng ilang teksto o pag-flash ng LED.

Tapos ka na!

Inirerekumendang: