Jak Provádět Paralelní úkoly (vlákna) V Programu Arduino

Obsah:

Jak Provádět Paralelní úkoly (vlákna) V Programu Arduino
Jak Provádět Paralelní úkoly (vlákna) V Programu Arduino

Video: Jak Provádět Paralelní úkoly (vlákna) V Programu Arduino

Video: Jak Provádět Paralelní úkoly (vlákna) V Programu Arduino
Video: Ардуино для начинающих. Загрузка скетча на плату. Установка Arduino IDE 2024, Listopad
Anonim

V mikroprocesorové technologii se úlohy běžící paralelně nazývají Threads. To je velmi výhodné, protože je často nutné provést několik operací najednou. Je možné, aby mikrokontrolér Arduino vykonával několik úkolů najednou, jako skutečný procesor? Uvidíme.

Paralelní proudy v programu Arduino
Paralelní proudy v programu Arduino

Je to nutné

  • - Arduino;
  • - 1 LED;
  • - 1 piezo bzučák.

Instrukce

Krok 1

Obecně řečeno, Arduino nepodporuje skutečnou paralelizaci nebo multithreading.

Ale můžete říct mikrokontroléru, aby zkontroloval, zda nadešel čas na provedení nějaké další úlohy na pozadí při každém opakování cyklu „loop ()“. V tomto případě se uživateli bude zdát, že je prováděno několik úkolů současně.

Například blikneme LED na dané frekvenci a paralelně vydáme zvuky, které stoupají a klesají jako siréna z piezoelektrického vysílače.

K Arduinu jsme více než jednou připojili LED i piezoelektrický vysílač. Sestavte obvod, jak je znázorněno na obrázku. Pokud připojujete LED k jinému digitálnímu kolíku než „13“, nezapomeňte mít odpor omezující proud asi 220 ohmů.

Schéma zapojení bzučáku a LED na Arduino
Schéma zapojení bzučáku a LED na Arduino

Krok 2

Pojďme napsat takový náčrt a nahrát ho do Arduina.

Po načtení desky můžete vidět, že náčrt není proveden přesně tak, jak bychom potřebovali: dokud nebude siréna plně funkční, LED dioda nebude blikat a my bychom chtěli, aby LED dioda blikala BĚHEM sirény. V čem je problém?

Faktem je, že tento problém nelze vyřešit obvyklým způsobem. Úkoly provádí mikrokontrolér přísně postupně. Operátor "delay ()" zpožďuje provádění programu o zadanou dobu a dokud tento čas nevyprší, nebudou provedeny následující příkazy programu. Z tohoto důvodu nemůžeme nastavit jinou dobu trvání každého úkolu v programu „loop ()“.

Proto musíte nějak simulovat multitasking.

Zvukové a LED ovládání v sérii
Zvukové a LED ovládání v sérii

Krok 3

Možnost, ve které bude Arduino plnit úkoly v pseudo-paralelě, navrhují vývojáři Arduina v článku

Podstata metody spočívá v tom, že při každém opakování smyčky „loop ()“kontrolujeme, zda je čas blikat LED (k provedení úkolu na pozadí) nebo ne. A pokud ano, obrátíme stav LED. Jedná se o druh obejití operátoru "delay ()".

Významnou nevýhodou této metody je, že část kódu před řídicí jednotkou LED musí být provedena rychleji než blikající časový interval LED „ledInterval“. V opačném případě bude blikat méně často, než je nutné, a nedostaneme účinek paralelního provádění úkolů. Zejména v našem náčrtu je doba změny zvuku sirény 200 + 200 + 200 + 200 = 800 ms a interval blikání LED jsme nastavili na 200 ms. LED ale bude blikat s periodou 800 ms, což je čtyřikrát odlišné od toho, co jsme nastavili. Obecně platí, že pokud je v kódu použit operátor „delay ()“, je obtížné simulovat pseudo-paralelismus, proto je vhodné se mu vyhnout.

V takovém případě by bylo nutné, aby jednotka pro ovládání zvuku sirény také zkontrolovala, zda nastal čas, či nikoli, a nepoužívala „delay ()“. To by ale zvýšilo množství kódu a zhoršilo čitelnost programu.

LED bliká bez zpoždění () operátor
LED bliká bez zpoždění () operátor

Krok 4

K vyřešení tohoto problému použijeme úžasnou knihovnu ArduinoThread, která vám umožní snadno vytvářet pseudo-paralelní procesy. Funguje to podobným způsobem, ale umožňuje vám to nepsat kód pro kontrolu času - ať už potřebujete provést úkol v této smyčce, nebo ne. To snižuje množství kódu a zlepšuje čitelnost náčrtu. Pojďme se podívat na knihovnu v akci.

Nejprve si stáhněte archiv knihovny z oficiálního webu https://github.com/ivanseidel/ArduinoThread/archive/master.zip a rozbalte jej do adresáře „libraries“Arduino IDE. Poté přejmenujte složku „ArduinoThread-master“na „ArduinoThread“.

Instalace knihovny ArduinoThread
Instalace knihovny ArduinoThread

Krok 5

Schéma připojení zůstane stejné. Změní se pouze programový kód. Nyní to bude stejné jako v postranním panelu.

V programu vytvoříme dva proudy, z nichž každý provádí svou vlastní činnost: jeden bliká LED, druhý ovládá zvuk sirény. V každé iteraci smyčky pro každé vlákno kontrolujeme, zda nadešel čas na jeho provedení. Pokud přijde, spustí se k provedení pomocí metody „run ()“. Hlavní věcí je nepoužívat operátor „delay ()“.

Podrobnější vysvětlení jsou uvedena v kódu.

Načtěte kód do paměti Arduino, spusťte jej. Nyní vše funguje přesně tak, jak má!

Doporučuje: