ARCHIV |
|||||||
Software (10844)
Distribuce (131)
Skripty (697)
Menu
Diskuze
Informace
|
Arduino III.V dnešním díle si popíšeme funkce, které nám usnadní a zkrátí náš program. Jsou to například proměnné, pole, cykly nebo podmínky.
Naučíme se s Arduinem komunikovat po sériové lince, s jejíž využitím si necháme do PC posílat data z potenciometru, nebo budeme testovat,
zda je tlačítko stisknuté, či nikoliv. V minulém díle jsme nainstalovali Arduino IDE v Linuxu i ve Windows a nastavili vše potřebné. Ukázali jsme si i jednoduchý program, kterým jsme blikali LED diodou. Řešení úkoluRůzných obdob tohoto úkolu je vlastně nepočítaně. Záleží jen na nás, kolik LED si vybereme a v jakém pořadí je budeme rozsvěcovat. Pro ukázku řešení si zvolím 5 LED, které naprogramuji jako běžící pás. Všechny diody tedy postupně rozsvítím a ve stejném pořadí je vzápětí budu zhasínat.
Jak vidíte, je tento kód poměrně dlouhý, za chvíli si tedy ukážeme, jak ho zkrátit. ProměnnéMůžeme se setkat s různýmy druhy. Udáváme, jaký typ dat v proměnné bude. Jeden ze základních typů je integreer, který se značí int. Proměnná tohoto typu může nabývat hodnot od -(2^15) až po (2^15)-1 . Avšak pokud chceme zapsat delší číslo, musíme použít datový typ long, do kterého můžeme vepsat čísla od -2,147,483,648 do 2,147,483,647. Důležitým typem je také Array (pole). Do něj vkládáme data vždy s nějakým indexem (="adresa"). Podle indexu pak můžeme lehce vyhledat uložené informace. Pokud se zajímáte o další typy můžete je nalézt zde Int, long...Většina proměnných se dá vytvořit velmi jednoduchou syntaxí. Vždy musíme programu říct, jaký datový typ od něj požadujeme, poté zadat název proměnné a její hodnotu (tu však není nutné zadat při vytvoření proměnné, ale můžeme ji přidat později). V názvu bychom se měli vyvarovat diakritiky. Ta by mohla způsobit chyby v zápisu do Arduina. Vytvoření proměnných vypadá následovně:
ArrayDalší typ proměnné. Do češtiny se překládá jako pole nebo řada. Každý prvek má svůj index, pod kterým ho můžeme v poli najít. První prvek v poli má index 0 a každý další o 1 větší. Pokud je počet prvků v poli známý, měli bychom zapsat jejich počet za jméno pole. Podle hranatých závorek se pozná, že máme na mysli právě pole. Před jeho názvem musíme napsat, jakého typu budou prvky pole.
CyklyPosledním krokem před zkrácením programu je naučit se něco o cyklech. Cyklus je operace která se x krát opakuje. Nejpoužívanější je cyklus for. Cyklu musíme říct, s jakou proměnnou má pracovat, počet opakování zajistíme podmínkou, a také mu řekneme, co má dělat při každém opakování.
Nyní se můžeme přesunout ke zkrácení našeho prvního kódu v tomto díle. ZkráceníZ praktických důvodů pro Vás bude lepší, když si kód zkusíte upravit sami. Výsledný kód by ale mohl vypadat takto:
Tento kód sice není o moc kratší než původní, ale představte si, že budete mít tento pás s 20 LED diodami. To už bude kód podstatně kratší. Sériová komunikaceVelmi užitečná funkce. Můžeme ji použít, když chceme zaslat nějaká data z Arduina do PC. Všechny modely mají alespoň jednu sériovou linku. Modely Mega mají tyto linky 3. Jak už bylo krátce zmíněno v minulém díle, Arduino je připojeno přes virtuální sériový port. Ve většině modelů je přímo na desce Serial to USB převodník, který tento port vytváří. Pouze k verzi Mini, Stamp a Lilypad je potřeba externí převodník. Digital readingPro tento typ využijeme funkci digitalRead(). Tato funkce testuje binární hodnotu na zvoleném vstupu. V tomto případě je to vstup 2. Zbytek je vysvětlen v kódu. Schéma zapojení je na obrázku níže. Velikost rezistoru by se měla pohybovat mezi 2000 a 10000 Ohmy. Po nahrátí programu v menu Tools klikněte na Serial Monitor. Objeví se vám okno, které můžete vidět na obrázku níže. Tento kód můžete najít v menu Examples. Zde je pouze přidaná prodleva 500 ms.
Analog readingPro tento příklad zapojte potenciomer podle druhého schématu. Velikost odporu potenciometru si můžeme zvolit prakticky jakoukoliv od 0 do cca 10k ohm. Potenciometr je totiž zapojen jako dělič napětí. Nezáleží tedy, jaká je skutečná hodnota odporu, ale na poměru dvou částí v potenciometru, jejichž velikost otáčením měníme. Pro naše účely je nejlepší potenciometr s lineárním průběhem. Zkoušení je však možné provádět i s ostatními typy. V softwaru je použita nová funkce analogRead(). Je to obdoba funkce digitalRead(), jen s rozdílem, že rozlišuje 1024 hodnot (0-1023). Navíc musíme střední pin potenciometru připojit na analogový vstup (např A0). Po spustění Serial Monitor se otevře podobné okno jako u předchozího příkladu. Budou zde však čísla od 0 po 1023 (podle otočení potenciometru).
PWMZkratka pro Pulse Width Modulation. Do češtiny se překládá jako pulsně šířková modulace. Je to pokus o digitální nahrazení analogové hodnoty. Nedochází zde ale ke změně velikosti napětí. Arduino může generovat PWM v rozsahu 0 až 255. 0 znamená, že neproudí žádný proud. 255 je nepřerušovaných 5 voltů. Hodnota 1 znamená jeden "schod" o velikosti 5 voltů o délce jednoho "taktu". Zbylých 252 "taktů" je na výstupu 0 voltů. Pokud tedy nastavíme hodnotu na 100, znamená to, že bude 100 "taktů" +5V a 155 "taktů" 0V. Poměr +5V ku 0V se nám projeví například jako různý jas LED, nebo jako různá rychlost otáčení motoru. Jak generovat PWM můžete vidět v následujícím kódu. Zapojte LED v sérii s 330 ohm resistorem mezi piny GND a 12. Vyzkoušejte různé velikosti proměnné jas. POZOR!! Arduino boardy mají pro PWM přímo určené výstupy. Na jiných výstupech nebude tato funkce fungovat.
Úkoly
Pro procvičení mám pro Vás dva úkoly.
Související články
Arduino - programování v čistém C(++)
Arduino - pulsně šířková modulace (PWM) v C(++) Arduino I. Arduino II. Arduino IV. Arduino V. Arduino VI. Arduino VII. Arduino VIII. Arduino IX. Arduino X. - měření teploty Předchozí Celou kategorii (seriál) Další
|
Vyhledávání software
Vyhledávání článků
28.11.2018 23:56 /František Kučera 12.11.2018 21:28 /Redakce Linuxsoft.cz 6.11.2018 2:04 /František Kučera 4.10.2018 21:30 /Ondřej Čečák 18.9.2018 23:30 /František Kučera 9.9.2018 14:15 /Redakce Linuxsoft.cz 12.8.2018 16:58 /František Kučera 16.7.2018 1:05 /František Kučera
Poslední diskuze
31.7.2023 14:13 /
Linda Graham 30.11.2022 9:32 /
Kyle McDermott 13.12.2018 10:57 /
Jan Mareš 2.12.2018 23:56 /
František Kučera 5.10.2018 17:12 /
Jakub Kuljovsky | |||||
ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2024) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze |