Ինչպես կատարել զուգահեռ առաջադրանքներ (թելեր) Arduino ծրագրում

Բովանդակություն:

Ինչպես կատարել զուգահեռ առաջադրանքներ (թելեր) Arduino ծրագրում
Ինչպես կատարել զուգահեռ առաջադրանքներ (թելեր) Arduino ծրագրում

Video: Ինչպես կատարել զուգահեռ առաջադրանքներ (թելեր) Arduino ծրագրում

Video: Ինչպես կատարել զուգահեռ առաջադրանքներ (թելեր) Arduino ծրագրում
Video: Զուգահեռ Կայանում 2024, Մայիս
Anonim

Միկրոպրոցեսորային տեխնոլոգիայում զուգահեռ ընթացող առաջադրանքները կոչվում են թելեր: Սա շատ հարմար է, քանի որ հաճախ անհրաժեշտ է միաժամանակ կատարել մի քանի գործողություններ: Հնարավո՞ր է, որ Arduino միկրոկոնտրոլերը միանգամից մի քանի առաջադրանք կատարի, ինչպես իրական պրոցեսորը: Եկեք տեսնենք

Uուգահեռ հոսքեր Arduino ծրագրում
Uուգահեռ հոսքեր Arduino ծրագրում

Դա անհրաժեշտ է

  • - Arduino;
  • - 1 LED;
  • - 1 պիեզո ձայն.

Հրահանգներ

Քայլ 1

Ընդհանրապես, Arduino- ն չի աջակցում իրական զուգահեռացման կամ բազմալեզուների:

Բայց միկրոհսկիչին կարող եք ասել, որ ստուգի `արդյո՞ք եկել է ժամանակը` «հանգույց ()» ցիկլի յուրաքանչյուր կրկնության վրա որոշակի լրացուցիչ, ֆոնային առաջադրանք կատարելու ժամանակը: Այս դեպքում օգտագործողին թվում է, որ միաժամանակ մի քանի առաջադրանք է կատարվում:

Օրինակ, եկեք թարթենք LED- ը տվյալ հաճախականությամբ և զուգահեռաբար թողարկենք այն պիոզոէլեկտրական ճառագայթման ազդանշանից բարձրացող ու ընկած ձայներ:

Մենք և՛ LED- ն, և՛ պիեզո-արտանետիչը միացրել ենք Arduino- ին մեկից ավելի անգամ: Եկեք հավաքենք շղթան, ինչպես ցույց է տրված նկարում: Եթե դուք միացնում եք LED- ը «13» -ից բացի այլ թվային քորոցին, հիշեք, որ ներկայիս սահմանափակող դիմադրությունը մոտ 220 օմ է:

Մազերի և LED- ի միացման դիագրամ Arduino- ին
Մազերի և LED- ի միացման դիագրամ Arduino- ին

Քայլ 2

Եկեք գրենք այսպիսի ուրվագիծ և վերբեռնեք այն Arduino- ում:

Գրատախտակը բեռնելուց հետո դուք կտեսնեք, որ ուրվագիծը չի կատարվում այնպես, ինչպես մենք ունենք դրա անհրաժեշտությունը. Մինչև ծորակը լիարժեք գործի դնելը, LED- ը չի թարթելու, և մենք կցանկանայինք, որ LED- ն թարթեր հնչերանգի հնչյունավորման ընթացքում: Ո՞րն է այստեղ խնդիրը:

Փաստն այն է, որ այս խնդիրը հնարավոր չէ լուծել սովորական եղանակով: Առաջադրանքները կատարվում են միկրոհսկիչի կողմից խիստ հաջորդականորեն: «Հետաձգում ()» օպերատորը հետաձգում է ծրագրի կատարումը նշված ժամանակահատվածով, և մինչ այս ժամկետի ավարտը հետևյալ ծրագրի հրամանները չեն կատարվի: Այդ պատճառով ծրագրի «օղակում ()» բաժնում մենք չենք կարող յուրաքանչյուր առաջադրանքի համար կատարել տարբեր կատարման տևողություն:

Հետեւաբար, դուք պետք է ինչ-որ կերպ մոդելավորեք բազմախնդրությունը:

Beeper- ի և LED- ի կառավարումը մի շարք
Beeper- ի և LED- ի կառավարումը մի շարք

Քայլ 3

Այն տարբերակը, որով Arduino- ն կեղծ կեղծ զուգահեռ առաջադրանքներ կկատարի, առաջարկվում է Arduino մշակողների կողմից https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay հոդվածում:

Մեթոդի էությունն այն է, որ «օղակի ()» օղակի յուրաքանչյուր կրկնության հետ մենք ստուգենք ՝ արդյո՞ք ժամանակն է թարթել LED- ը (ֆոնային առաջադրանք կատարելու համար), թե ոչ: Եվ եթե դա տեղի է ունենում, ապա մենք շրջում ենք LED- ի վիճակը: Սա մի տեսակ շրջանցելու է «հետաձգում ()» օպերատորը:

Այս մեթոդի էական թերությունն այն է, որ լուսադիոդային կառավարման միավորի դիմաց ծածկագրի հատվածը պետք է կատարվի ավելի արագ, քան «ledInterval» LED- ի թարթող ժամանակային միջակայքը: Հակառակ դեպքում թարթելը տեղի կունենա անհրաժեշտից պակաս հաճախ, և մենք չենք ստանա առաջադրանքների զուգահեռ կատարման ազդեցություն: Մասնավորապես, մեր ուրվագծում ազդանշանի ձայնի փոփոխության տևողությունը 200 + 200 + 200 + 200 = 800 մվրկ է, և մենք LED- ի թարթման միջակայքը դնում ենք 200 մվրկ: Բայց LED- ը կթարթա 800 մկս ժամանակահատվածով, ինչը 4 անգամ տարբերվում է մեր սահմանածից: Ընդհանրապես, եթե ծածկագրում օգտագործվում է «հետաձգում ()» օպերատորը, ապա կեղծ զուգահեռականությունը դժվար է նմանակել, ուստի խորհուրդ է տրվում խուսափել դրանից:

Այս դեպքում անհրաժեշտ կլինի, որ ազդանշանային ձայնային հսկողության ստորաբաժանումը ստուգի նաև ժամանակը եկել է, թե ոչ, և չօգտագործել «ուշացում ()»: Բայց դա կբարձրացնի ծածկագրի քանակը և կվատթարացնի ծրագրի ընթերցանությունը:

LED թարթում է առանց հապաղելու () օպերատոր
LED թարթում է առանց հապաղելու () օպերատոր

Քայլ 4

Այս խնդիրը լուծելու համար մենք կօգտագործենք հիանալի ArduinoThread գրադարանը, որը թույլ է տալիս հեշտությամբ ստեղծել կեղծ զուգահեռ գործընթացներ: Այն աշխատում է նույն կերպ, բայց դա թույլ է տալիս Ձեզ չգրել ծածկագիր ՝ ժամանակը ստուգելու համար ՝ անկախ նրանից ՝ այս օղակում անհրաժեշտ է կատարել առաջադրանքը, թե ոչ: Սա նվազեցնում է ծածկագրի քանակը և բարելավում ուրվագծի ընթերցանությունը: Եկեք ստուգենք գրադարանը գործողության մեջ:

Նախևառաջ, ներբեռնեք գրադարանի արխիվը https://github.com/ivanseidel/ArduinoThread/archive/master.zip պաշտոնական կայքից և ապամոնտաժեք այն Arduino IDE- ի «գրադարանների» գրացուցակում: Դրանից հետո վերանվանեք «ArduinoThread-master» պանակը «ArduinoThread»:

ArduinoThread գրադարանի տեղադրում
ArduinoThread գրադարանի տեղադրում

Քայլ 5

Միացման դիագրամը կմնա նույնը: Փոխվելու է միայն ծրագրի կոդը: Հիմա դա կլինի նույնը, ինչ կողային տողում:

Րագրում մենք ստեղծում ենք երկու հոսք, յուրաքանչյուրն իրականացնում է իր գործողությունը. Մեկը թարթում է LED- ով, երկրորդը վերահսկում է ազդանշանի ձայնը: Օղակի յուրաքանչյուր կրկնության դեպքում, յուրաքանչյուր թելի համար, մենք ստուգում ենք ՝ արդյո՞ք եկել է դրա կատարման ժամանակը, թե ոչ: Եթե այն տեղ հասնի, այն գործարկվում է կատարման համար `օգտագործելով« վազել () »մեթոդը: Հիմնական բանը `չօգտագործել« հետաձգում () »օպերատոր:

Ավելի մանրամասն բացատրությունները տրված են ծածկագրում:

Եկեք բեռնենք կոդը Arduino հիշողության մեջ, գործարկենք այն: Հիմա ամեն ինչ գործում է ճիշտ այնպես, ինչպես պետք է:

Խորհուրդ ենք տալիս: