როგორ შევასრულოთ პარალელური დავალებები (თემები) Arduino პროგრამაში

Სარჩევი:

როგორ შევასრულოთ პარალელური დავალებები (თემები) Arduino პროგრამაში
როგორ შევასრულოთ პარალელური დავალებები (თემები) Arduino პროგრამაში

ვიდეო: როგორ შევასრულოთ პარალელური დავალებები (თემები) Arduino პროგრამაში

ვიდეო: როგორ შევასრულოთ პარალელური დავალებები (თემები) Arduino პროგრამაში
ვიდეო: НАЧИНАЕМ ПРОГРАММИРОВАТЬ АРДУИНО | ARDUINO IDE #arduinoide 2024, მაისი
Anonim

მიკროპროცესორული ტექნოლოგიის დროს პარალელურად გაშვებულ ამოცანებს Threads ეწოდება. ეს ძალიან მოსახერხებელია, რადგან ხშირად საჭიროა ერთდროულად რამდენიმე ოპერაციის შესრულება. შესაძლებელია, რომ Arduino მიკროკონტროლერმა შეასრულოს რამდენიმე დავალება, როგორც ნამდვილი პროცესორი? Მოდი ვნახოთ.

პარალელური ნაკადები 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 დეველოპერების მიერ სტატიაში

მეთოდის არსი იმაშია, რომ "მარყუჟის ()" მარყუჟის ყოველი გამეორებით ვამოწმებთ დროა თუ არა LED- ს თვალის დახამხამება (ფონის ამოცანის შესრულება) და თუ ასეა, ჩვენ ვაქცევთ 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 მეხსიერებაში, გაუშვით. ახლა ყველაფერი მუშაობს ზუსტად ისე, როგორც საჭიროა!

გირჩევთ: