Jinsi Ya Kufanya Kazi Sambamba (Threads) Katika Programu Ya Arduino

Orodha ya maudhui:

Jinsi Ya Kufanya Kazi Sambamba (Threads) Katika Programu Ya Arduino
Jinsi Ya Kufanya Kazi Sambamba (Threads) Katika Programu Ya Arduino

Video: Jinsi Ya Kufanya Kazi Sambamba (Threads) Katika Programu Ya Arduino

Video: Jinsi Ya Kufanya Kazi Sambamba (Threads) Katika Programu Ya Arduino
Video: PARTS & SERVICES E01: JINSI YA KUANGALIA OIL BILA KUTUMIA DEEPSTICK (BMW) 2024, Novemba
Anonim

Katika teknolojia ya microprocessor, kazi zinazoendesha sambamba zinaitwa Threads. Hii ni rahisi sana, kwa sababu mara nyingi inahitajika kufanya shughuli kadhaa kwa wakati mmoja. Inawezekana kumfanya mdhibiti mdogo wa Arduino afanye kazi kadhaa mara moja, kama processor halisi? Hebu tuone.

Mito sawa katika mpango wa Arduino
Mito sawa katika mpango wa Arduino

Ni muhimu

  • - Arduino;
  • - 1 LED;
  • - buzzer 1 ya piezo.

Maagizo

Hatua ya 1

Kwa ujumla, Arduino haiungi mkono usawa wa kweli, au kusoma anuwai.

Lakini unaweza kumwambia mdhibiti mdogo aangalie ikiwa wakati umefika wa kutekeleza kazi ya ziada, ya nyuma katika kila kurudia kwa mzunguko wa "kitanzi ()". Katika kesi hii, itaonekana kwa mtumiaji kuwa kazi kadhaa zinafanywa wakati huo huo.

Kwa mfano, wacha tuangaze LED kwa masafa yaliyopewa na, sambamba, toa sauti zinazoinuka na kushuka kama siren kutoka kwa mtoaji wa piezoelectric.

Tumeunganisha LED na mtoaji wa piezo kwa Arduino zaidi ya mara moja. Wacha tukusanye mzunguko kama inavyoonyeshwa kwenye takwimu. Ikiwa unaunganisha LED na pini ya dijiti tofauti na "13", kumbuka kuwa na kipinga nguvu cha sasa cha karibu ohms 220.

Mchoro wa wiring kwa buzzer na LED kwa Arduino
Mchoro wa wiring kwa buzzer na LED kwa Arduino

Hatua ya 2

Wacha tuandike mchoro kama huu na upakie kwa Arduino.

Baada ya kupakia bodi, unaweza kuona kwamba mchoro haujatekelezwa kama vile tunahitaji: hadi siren itakapofanya kazi kikamilifu, LED haitaangaza, na tungependa LED iangaze WAKATI wa mlio wa siren. Je! Kuna shida gani hapa?

Ukweli ni kwamba shida hii haiwezi kutatuliwa kwa njia ya kawaida. Kazi zinafanywa na microcontroller madhubuti mfululizo. Opereta ya "kuchelewesha ()" huchelewesha utekelezaji wa programu kwa muda maalum, na hadi wakati huu utakapomalizika, amri zifuatazo za programu hazitatekelezwa. Kwa sababu ya hii, hatuwezi kuweka muda tofauti wa utekelezaji kwa kila kazi katika "kitanzi ()" cha programu.

Kwa hivyo, unahitaji kwa njia fulani kuiga kazi nyingi.

Beeper na udhibiti wa LED katika safu
Beeper na udhibiti wa LED katika safu

Hatua ya 3

Chaguo ambalo Arduino atafanya kazi kwa kulinganisha bandia inapendekezwa na watengenezaji wa Arduino katika kifungu

Kiini cha njia hiyo ni kwamba kwa kila kurudia kwa kitanzi cha "kitanzi ()", tunaangalia ikiwa ni wakati wa kupepesa LED (kufanya kazi ya usuli) au la. Na ikiwa inafanya, basi tunabadilisha hali ya LED. Hii ni aina ya kupitisha opereta wa "kuchelewesha ()".

Ubaya mkubwa wa njia hii ni kwamba sehemu ya nambari mbele ya kitengo cha kudhibiti LED inapaswa kutekelezwa haraka kuliko muda wa kupepesa wa mwangaza wa "ledInterval" LED. Vinginevyo, kupepesa hakutatokea mara kwa mara kuliko lazima, na hatutapata athari ya utekelezaji sawa wa majukumu. Hasa, katika mchoro wetu, muda wa mabadiliko ya sauti ya siren ni 200 + 200 + 200 + 200 = 800 msec, na tunaweka mwangaza wa mwangaza wa LED hadi 200 msec. Lakini LED itaangaza na kipindi cha 800 msec, ambayo ni mara 4 tofauti na ile tunayoweka. Kwa ujumla, ikiwa mwendeshaji wa "kuchelewesha ()" hutumiwa katika nambari, basi ni ngumu kuiga ulinganifu wa uwongo, kwa hivyo inashauriwa kuizuia.

Katika kesi hii, itakuwa muhimu kwa kitengo cha kudhibiti sauti ya siren pia kuangalia ikiwa wakati umefika au la, na sio kutumia "kuchelewesha ()". Lakini hii itaongeza idadi ya nambari na kuzidisha usomaji wa programu.

Kuangaza kwa LED bila kuchelewesha () mwendeshaji
Kuangaza kwa LED bila kuchelewesha () mwendeshaji

Hatua ya 4

Ili kutatua shida hii, tutatumia maktaba nzuri ya ArduinoThread, ambayo hukuruhusu kuunda michakato ya uwongo-sawa. Inafanya kazi kwa njia ile ile, lakini hukuruhusu usiandike nambari ili uangalie wakati - ikiwa unahitaji kutekeleza kazi katika kitanzi hiki au la. Hii inapunguza idadi ya nambari na inaboresha usomaji wa mchoro. Wacha tuangalie maktaba kwa vitendo.

Kwanza kabisa, pakua jalada la maktaba kutoka kwa wavuti rasmi https://github.com/ivanseidel/ArduinoThread/archive/master.zip na uifungue kwenye saraka ya "maktaba" ya IDE ya Arduino. Kisha badilisha jina "ArduinoThread-master" folda kuwa "ArduinoThread".

Kufunga maktaba ya ArduinoThread
Kufunga maktaba ya ArduinoThread

Hatua ya 5

Mchoro wa unganisho utabaki vile vile. Nambari tu ya programu itabadilika. Sasa itakuwa sawa na kwenye mwambao wa pembeni.

Katika programu hiyo, tunaunda mito miwili, kila moja hufanya operesheni yake mwenyewe: moja inaangaza na LED, ya pili inadhibiti sauti ya siren. Katika kila upeo wa kitanzi, kwa kila uzi, tunaangalia ikiwa wakati umefika wa utekelezaji wake au la. Ikiwa inafika, imezinduliwa kwa utekelezaji kwa kutumia njia ya "kukimbia ()". Jambo kuu sio kutumia mwendeshaji wa "kuchelewesha ()".

Maelezo zaidi ya kina hutolewa katika nambari.

Wacha tupakie nambari hiyo kwenye kumbukumbu ya Arduino, tumia. Sasa kila kitu hufanya kazi kama inavyostahili!

Ilipendekeza: