• Popis příkazů arduina. Programování Arduina v C v AVR Studiu

    Ahoj! Jsem Alikin Alexander Sergejevič, učitel Další vzdělávání, vedu kroužky „Robotika“ a „Radiotechnika“ v Ústředním divadle dětí a mládeže v Labinsku. Chtěl bych trochu mluvit o zjednodušené metodě Programování Arduina pomocí programu "ArduBlock".

    Vstoupil jsem do tohoto programu vzdělávací proces a potěšen výsledkem, je zvláště žádaný mezi dětmi, zejména při psaní jednoduchých programů nebo při vytváření nějakého druhu počáteční fáze komplexní programy. ArduBloсk je grafické programovací prostředí, to znamená, že všechny akce jsou prováděny s nakreslenými obrázky s podepsanými akcemi v ruštině, což výrazně zjednodušuje učení platformy Arduino. Děti od 2. třídy si díky tomuto programu snadno osvojí práci s Arduinem.

    Ano, někdo by mohl říct, že Scratch stále existuje a je to také velmi jednoduché grafické prostředí pro programování Arduina. Scratch ale Arduino neflashuje, ale pouze ho ovládá pomocí USB kabel. Arduino je závislé na počítači a nemůže pracovat autonomně. Při vytváření vlastních projektů je autonomie pro Arduino hlavní věcí, zejména při vytváření robotických zařízení.

    I ty známé LEGO roboti, jako je NXT nebo EV3, už naši studenti nejsou tak zajímaví s příchodem programu ArduBloсk v programování Arduino. Arduino je také mnohem levnější než jakýkoli návrhář LEGO a mnoho komponent lze jednoduše převzít ze staré spotřební elektroniky. Program ArduBloсk pomůže v práci nejen začátečníkům, ale i aktivním uživatelům platformy Arduino.

    Takže, co je ArduBlock? Jak jsem řekl, jedná se o grafické programovací prostředí. Téměř kompletně přeloženo do ruštiny. Ale v ArduBloсku je vrcholem nejen toto, ale také skutečnost, že námi napsaný program ArduBloсk je převeden do kódu Arduino IDE. Tento program je zabudován do programovacího prostředí Arduino IDE, tedy je to plugin.

    Níže je uveden příklad blikající LED a převedeného programu v Arduino IDE. Veškerá práce s programem je velmi jednoduchá a pochopí ji každý student.

    Díky práci na programu můžete Arduino nejen programovat, ale také se naučit příkazy, které jsou pro nás v textový formát Arduino IDE, ale pokud jste příliš líní psát standardní příkazy, měli byste rychle načrtnout jednoduchý program v ArduBlok pomocí rychlých manipulací myší a odladit jej v Arduino IDE.

    Chcete-li nainstalovat ArduBlok, musíte si nejprve stáhnout a nainstalovat Arduino IDE z oficiálního webu Arduino a při práci s deskou se vypořádat s nastavením Arduino UNO. Jak to udělat, je popsáno na stejném webu nebo na Amperku, případně se podívejte na YouTube. No, když jste na to všechno přišli, musíte si stáhnout ArduBlok z oficiálních stránek zde. Nedoporučuji stahovat nejnovější verze, pro začátečníky jsou velmi obtížné, ale verze z 2013-07-12 je nejdůležitější, tento soubor je tam nejoblíbenější.

    Poté stažený soubor přejmenujeme na ardublock-all a ve složce „documents“. Vytvořte následující složky: Arduino > tools > ArduBlockTool > tool a do té druhé hodíme stažený a přejmenovaný soubor. ArduBlok funguje pro každého operační systémy, i na Linuxu, osobně jsem to testoval na XP, Win7, Win8, všechny příklady jsou pro Win7. Instalace programu je pro všechny systémy stejná.

    No, pokud je to jednodušší, připravil jsem archiv na Mail-disk 7z, po rozbalení najdete 2 složky. Jeden už funguje Program Arduino IDE a v jiné složce musí být obsah odeslán do složky Dokumenty.

    Abyste mohli pracovat v ArduBlok, musíte spustit Arduino IDE. Poté přejdeme na záložku Nástroje a tam najdeme položku ArduBlok, klikneme na ni – a je to tady, náš cíl.

    Nyní se pojďme zabývat rozhraním programu. Jak jste již pochopili, nejsou v něm žádná nastavení, ale existuje spousta ikon pro programování a každá z nich nese příkaz v textovém formátu Arduino IDE. V nových verzích je ještě více ikon, takže se vypořádejte s ArduBlok Nejnovější verze obtížné a některé ikony nejsou přeloženy do ruštiny.

    V sekci "Management" najdeme celou řadu cyklů.

    V sekci „Porty“ můžeme spravovat hodnoty portů, stejně jako k nim připojených zvukových emitorů, serv nebo ultrazvukových senzorů přiblížení.

    V sekci "Čísla / Konstanty" můžeme vybrat digitální hodnoty nebo vytvořit proměnnou, ale je nepravděpodobné, že použijete níže uvedenou.

    V sekci "Operátoři" najdeme všechny potřebné porovnávací a výpočetní operátory.

    Sekce Utility většinou používá ikony v průběhu času.

    „TinkerKit Bloks“ je sekce pro zakoupené senzory TinkerKit. Takovou sadu samozřejmě nemáme, ale to neznamená, že ikonky nebudou fungovat u jiných sad, naopak pro chlapy je velmi výhodné použít ikony jako rozsvícení LED nebo tlačítka . Tyto znaky se používají téměř ve všech programech. Mají však jednu zvláštnost - když jsou vybrány, jsou zde nesprávné ikony označující porty, takže je třeba je odstranit a ikona ze sekce „čísla / konstanty“ by měla být nahrazena v horní části seznamu.

    "DF Robot" - tato sekce se používá, pokud jsou v ní specifikovány senzory, někdy jsou nalezeny. A náš dnešní příklad není výjimkou, máme „Adjustable IR Switch“ a „Line Sensor“. "Čárový snímač" je jiný než na obrázku, stejně jako z Amperky. Jejich akce jsou totožné, ale snímač od Amperky je mnohem lepší, protože má regulátor citlivosti.

    Seeedstudio Grove - Nikdy jsem nepoužil senzory této sekce, ačkoli jsou tam pouze joysticky. Tato sekce byla rozšířena v nových verzích.

    A poslední sekce je to Linker Kit. Senzory v něm prezentované mi nepřišly.

    Rád bych ukázal příklad programu na robotu pohybujícím se po pásu. Robot je velmi jednoduchý, jak při montáži, tak při pořizování, ale nejprve. Začněme jeho pořízením a montáží.

    Zde je samotná sada dílů, vše zakoupeno na stránkách Amperky.

    1. AMP-B001 Motor Shield (2 kanály, 2 A) 1 890 rublů
    2. AMP-B017 Troyka Shield 1 690 RUB
    3. AMP-X053 Prostor pro baterie 3×2 AA 1 60 RUB
    4. AMP-B018 Čidlo vedení digitální 2 580 RUB
    5. ROB0049 Dvoukolová plošina miniQ 1 1890 RUB
    6. SEN0019 Infračervený snímač překážek 1 390 RUB
    7. FIT0032 Držák pro infračervený snímač překážek 1 90 RUB
    8. A000066 Arduino Uno 1 1150 RUB

    Nejprve sestavíme kolovou plošinu a připájeme dráty k motorům.

    Poté nainstalujeme racky pro uchycení desky Arduino UNO, které byly převzaty ze starého základní deska nebo jiné podobné přílohy.

    Poté k těmto stojanům připevníme desku Arduino UNO, ale nemůžeme upevnit jeden šroub - konektory překážejí. Můžete je samozřejmě pájet, ale je to na vás.

    Dále připevníme infračervený senzor překážky na jeho speciální držák. Mějte na paměti, že ovládání citlivosti je nahoře, slouží k snadnému nastavení.

    Nyní instalujeme digitální liniové senzory, zde musíme hledat pár šroubů a 4 matice pro ně.Nainstalujeme dvě matice mezi samotnou plošinu a liniový senzor a senzory připevníme ke zbytku.

    Při další instalaci Motor Shield nebo jiným způsobem můžete zavolat řidiče motoru. V našem případě si dejte pozor na propojku. Nebudeme používat samostatný napájecí zdroj pro motory, proto je instalován v této poloze. Spodní část je utěsněna elektrickou páskou, aby pro každý případ nedocházelo k náhodným zkratům z USB konektoru Arduina UNO.

    Nainstalujte Troyka Shield na horní stranu Motor Shield. Je to nezbytné pro pohodlí připojení senzorů. Všechny senzory, které používáme, jsou digitální, takže linkové senzory jsou připojeny k portům 8 a 9, jak se jim také říká piny, a infračervený senzor překážek je připojen k portu 12. Nezapomeňte, že nemůžete použít porty 4, 5, 6, 7, protože je používá motorový štít k ovládání motorů. Dokonce jsem tyto porty speciálně natřel červenou fixou, aby na to studenti přišli.

    Pokud jste si již všimli, pro každý případ jsem přidal černou objímku, aby nám instalovaná přihrádka na baterie nevyletěla. A nakonec celou konstrukci zafixujeme obyčejnou gumičkou.

    Připojení bateriového prostoru může být 2 typů. První drátové připojení k Troyka Shield. Je také možné připájet napájecí zástrčku a připojit ji k Deska Arduino OSN.

    Zde je náš robot připraven. Než začnete programovat, budete se muset naučit, jak vše funguje, konkrétně:
    - Motory:
    Porty 4 a 5 se používají k ovládání jednoho motoru a porty 6 a 7 druhého;
    Rychlost otáčení motorů upravujeme pomocí PWM na portech 5 a 6;
    Vpřed nebo vzad pomocí signalizačních portů 4 a 7.
    - Senzory:
    Všichni jsme digitální, takže dávají logické signály ve tvaru 1 nebo 0;
    A aby je bylo možné nastavit, mají speciální regulátory a pomocí vhodného šroubováku je lze kalibrovat.

    Podrobnosti najdete na Amperce. Proč tady? Protože informací o práci s Arduinem je spousta.

    No, možná jsme se na všechno podívali povrchně, nastudovali a robota samozřejmě sestavili. Nyní je třeba naprogramovat, tady je - dlouho očekávaný program!

    A program převeden na Arduino IDE:

    Void setup() ( pinMode(8, INPUT); pinMode(12, INPUT); pinMode(9, INPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); pinMode(5, OUTPUT); pinMode(6 , OUTPUT); ) void loop() ( if (digitalRead(12)) ( if (digitalRead(8)) ( if (digitalRead(9)) ( digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite( 6, 255); digitalWrite(7 , HIGH); ) else ( digitalWrite(4 , HIGH); analogWrite(5, 255); analogWrite(6, 50); digitalWrite(7 , LOW); ) ) else ( if (digitalRead (9)) ( digitalWrite(4, LOW); analogWrite(5, 50); analogWrite(6, 255); digitalWrite(7, HIGH); ) else ( digitalWrite(4, HIGH); analogWrite(5, 255); analogWrite(6, 255); digitalWrite(7 , HIGH); ) ) ) else ( digitalWrite(4 , HIGH); analogWrite(5, 0); analogWrite(6, 0); digitalWrite(7, HIGH); ) )

    Závěrem chci říci, že tento program je jen boží dar pro vzdělávání, i pro samouky, pomůže ke studiu Arduino příkazy IDE. Nejdůležitější zajímavostí je, že s více než 50 instalačními ikonami začíná „selhávat“. Ano, to je skutečně vrchol, protože neustálé programování pouze na ArduBlok vás nenaučí programovat v Arduino IDE. Takzvaný „glitch“ umožňuje přemýšlet a snažit se zapamatovat si příkazy pro přesné ladění programů.

    Přeji ti úspěch.

    Základem programovacího jazyka modulu Arduino je jazyk C (spíše C++). Přesněji se tento dialekt jazyka nazývá Processing/Wiring. Dobrý přehled jazyka naleznete v příloze. A chci mluvit víc ne o jazyku, ale o programování.

    Program je sada příkazů, kterým rozumí procesor, procesor vašeho počítače nebo procesor mikrokontroléru modulu Arduino, na tom nezáleží. Procesor čte instrukce a provádí je. Všechny příkazy, kterým procesor rozumí, jsou binární čísla. Jsou to pouze binární čísla a nic jiného. Naplňující aritmetické operace, pro který byl procesor kdysi určen, procesor operuje s čísly. Binární čísla. A ukázalo se, že příkazy a to, na co odkazují, jsou pouze binární čísla. Takhle. Jak ale procesor rozumí této "hromadě" binární čísla?

    Nejprve se všechna tato binární čísla zapíší do po sobě jdoucích buněk paměť s náhodným přístupem mít adresy. Když nahrajete program a ten se rozběhne, dostane procesor první adresu programu, kam se musí instrukce zapsat. Ty instrukce, které vyžadují operace s čísly od procesoru, mají „identifikační znaky“, například že v dalších dvou paměťových buňkách jsou dvě čísla, která je potřeba sečíst. A počítadlo, říkejme mu počítadlo příkazů, kde je zapsána adresa dalšího příkazu tento případ zvýší adresu, takže program bude mít další instrukci na této adrese. Na špatná práce program nebo selhání, procesor může udělat chybu a poté, co místo příkazu přečte číslo, procesor vůbec nedělá to, co by měl dělat, a program „zamrzne“.

    Každý program je tedy posloupnost binárních čísel. A programování je schopnost správně zapisovat správné posloupnosti binárních čísel. Už dávno se začali používat speciální prostředky které se nazývají programovací jazyky.

    Jakýkoli program však především vyžaduje, abyste jasně rozuměli tomu, co má program dělat a k čemu slouží. Čím jasněji tomu rozumíte, tím snazší je vytvořit program. Malé programy, i když je těžké určit, které programy jsou malé a které ne, lze to považovat za celek. Složitější programy je nejlépe rozdělit na části, které lze považovat za nezávislé programy. Takže se lépe vytvářejí, snáze se ladí a testují.

    Nejsem připraven se hádat, ale myslím si, že je pohodlnější spustit program s popisem v běžném jazyce. A v tomto smyslu se domnívám, že programování by se nemělo zaměňovat s psaním programového kódu. Když je program popsán běžnými výrazy, je pro vás snazší například určit, jaký programovací jazyk zvolit pro tvorbu programového kódu.

    Nejbližší věc k psaní programu pomocí binárních čísel je jazyk symbolických instrukcí. Vyznačuje se korespondencí jazykových příkazů s binárními příkazy srozumitelnými pro procesor. Ale kódování programů v assembleru vyžaduje více úsilí a má blíže k umění než k formálním operacím. Jazyky na vysoké úrovni jako Basic nebo C jsou všestrannější a snáze se používají. A dlouhá doba na psaní programů obecný pohled používat grafický jazyk a Nedávno existovali i „překladatelé“ z tohoto jazyka do jazyka zpracovatelů.

    Kromě obecných programovacích jazyků vždy existovala určitá specializace programovacích jazyků a existovaly specializované jazyky. K poslednímu jmenovanému bych zařadil i programovací jazyk modulu Arduino.

    Vše, co potřebujete sdělit modulu, aby udělal něco, co potřebujeme, je uspořádáno do pohodlné sady příkazů. Ale nejprve, co potřebujeme od Arduina?

    Modul lze použít v různé kvality- toto je srdce (nebo hlava) robota, to je základ zařízení, je to také pohodlný konstruktér pro zvládnutí práce s mikrokontroléry atd.

    Výše jsme již použili jednoduché programy pro kontrolu připojení modulu k počítači. Někomu se mohou zdát příliš jednoduché, a tudíž nezajímavé, ale jakékoli složité programy se skládají z jednodušších fragmentů, podobných těm, se kterými jsme se již setkali.

    Podívejme se, co nejvíc jednoduchý program"Blikání LED"

    int ledPin = 13;

    pinMode(ledPin, OUTPUT);

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    Nejprve si připomeňme, co je to LED. V podstatě se jedná o obyčejnou diodu, u které díky své konstrukci při protékání proudu v propustném směru začne přechod svítit. To znamená, že aby LED svítila, musí jí protékat proud, což znamená, že na LED musí být přivedeno napětí. A aby proud nepřekročil povolenou hodnotu, měl by být do série s LED zapojen rezistor, kterému se říká proudové omezení (viz Příloha A, digitální výstup). Mikrokontrolér, který tvoří základ modulu Arduino, přivádí napětí na LED. Mikrokontrolér má kromě procesoru, který provádí naše příkazy, jeden nebo více I/O portů. Bez ohledu na to konkrétní zařízení port, řekněme - když výstup portu funguje jako výstup, může být reprezentován jako výstup digitálního mikroobvodu se dvěma stavy, zapnuto a vypnuto (na výstupu je napětí, na výstupu není napětí) .

    Ale stejný pin portu může fungovat také jako vstup. V tomto případě může být reprezentován např. jako vstup digitálního mikroobvodu - na vstup je přivedena logická úroveň, vysoká nebo nízká (viz Příloha A, digitální vstup).

    Jak blikáme LED diodou:

    Povolit výstupní pin portu. Zakázat výstup portu.

    Procesor je ale velmi rychlý. Blikání si nestihneme všimnout. Abychom si všimli tohoto blikání, musíme přidat pauzy. to je:

    Povolit výstupní pin portu. Pauza 1 sekundu.

    Zakázat výstup portu.

    Pauza 1 sekundu.

    Toto je náš program. Procesor přečte první příkaz a zapne výstup, rozsvítí se LED. Poté se procesor zastaví a vypne výstup, LED zhasne. Ale zamrkal jen jednou.

    Opakování procesu nebo sady příkazů se v programování nazývá cyklus. Jsou používány odlišné typy cykly. Existuje smyčka, která se provede daný počet opakování. Toto je smyčka for. Existují smyčky, které běží, dokud není splněna nějaká podmínka, která je součástí konstrukce jazyka smyčky. A pokud podmínka není nikdy splněna, cyklus se provede nekonečné číslo jednou. Je to nekonečný koloběh.

    Nemyslím si, že se mikrokontroléry používají s programy výše uvedeného druhu. To znamená, že se jednou provede několik příkazů a ovladač již nefunguje. Zpravidla pracuje neustále, jakmile je na něj přivedeno napájecí napětí. A proto musí mikrokontrolér pracovat v nekonečné smyčce.

    To říká funkce void loop(), loop je smyčka, uzavřená smyčka. Neexistují žádné podmínky pro ukončení smyčky, a tedy ani podmínky pro její ukončení.

    Navíc musíme informovat modul Arduino, který pin portu a jak chceme použít, pro výstup (OUTPUT) nebo pro vstup (INPUT). K tomuto účelu slouží funkce void setup(), která pro jazyk Arduino je povinný, i když se nepoužívá, a příkaz pinMode() pro nastavení provozního režimu pinu.

    pinMode(ledPin, OUTPUT);

    A přesto konstrukce jazyka používá proměnné k určení výstupního čísla:

    int ledPin = 13;

    Použití proměnných je pohodlné. Pokud se rozhodnete, že místo výstupu 12 použijete výstup 13, provedete změnu pouze na jednom řádku. To platí zejména v velké programy. Název proměnné lze libovolně zvolit, ale zpravidla se musí jednat pouze o znaky a často je počet znaků omezen. Pokud špatně nastavíte název proměnné, myslím, že vás kompilátor opraví.

    Funkce digitalWrite(ledPin, HIGH) nastaví daný pin do stavu s vysoká úroveň, to znamená, že zahrnuje výstup.

    A zpoždění (1000), jak jste již pochopili, znamená pauzu 1000 milisekund nebo 1 sekundu.

    Zbývá pochopit, co znamenají takové předpony jako int, void. Jakékoli hodnoty, libovolné proměnné jsou umístěny v paměti, stejně jako příkazy programu. Čísla se často zapisují do paměťových buněk o velikosti 8 bitů. Toto je bajt. Ale bajty jsou čísla od 0 do 255. Pro pořádek velká čísla potřebujete dva bajty nebo více, tedy dvě nebo více paměťových buněk. Aby bylo procesoru jasné, jak číslo najít, odlišné typyčísla mají různá jména. Takže číslo zvané byte zabere jednu buňku, int (celé číslo, celé číslo) je větší. Kromě toho funkce používané v programovacích jazycích také vracejí čísla. Chcete-li určit, jaký typ čísla má funkce vrátit, uveďte před funkci tento typ vráceného čísla. Některé funkce však nemusí vracet čísla, takovým funkcím předchází void (viz Příloha A, proměnné).

    Tolik zajímavého může vyprávět i ten nejjednodušší program.

    To vše se, doufám, dočtete v příloze. A teď pojďme dělat jednoduché experimenty, jen s tím, co už známe z možností jazyka. Nejprve vyměňme typ proměnné int, který zabírá hodně místa v paměti, na bajt - jedno místo, jedna paměťová buňka. Pojďme se podívat, co můžeme udělat.

    byte ledPin = 13;

    pinMode(ledPin, OUTPUT);

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    Po zkompilování a načtení programu do modulu nezaznamenáme žádné změny v chodu programu. Pokuta. Poté program změníme tak, abychom zaznamenali změny v jeho práci.

    Za tímto účelem nahradíme číslo ve funkci delay (1000) proměnnou a pojmenujeme ji my_del. Tato proměnná musí být celé číslo, tedy int.

    int my_del = 5000;

    Každý příkaz nezapomeňte ukončit středníkem. Proveďte změny v programu, zkompilujte jej a načtěte do modulu. Poté změňte proměnnou a znovu zkompilujte a načtěte:

    byte my_del = 5000;

    Rozdíl, jsem si jistý, bude patrný.

    Udělejme další experiment se změnou délky pauz. Zkrácení délky přestávek, řekněme, pětkrát. Zastavme se na 2 sekundy a poté také pětkrát zvýšíme. Zastavme se znovu na 2 sekundy. Je volána smyčka, která běží daný počet opakování pro smyčku a píše se to takto:

    for (int i = 0; i<5; i++)

    něco, co se provádí ve smyčce for

    K provedení cyklu potřebuje proměnnou, máme ji i, proměnné je třeba dát počáteční hodnotu, kterou jsme jí přiřadili. Pak následuje ukončovací podmínka cyklu, máme i menší než 5. A zápis i++ je zápis zvýšení proměnné o jedničku, což je typické pro jazyk C. Složené závorky omezují sadu příkazů, které mají být provedeny ve smyčce for. Jiné programovací jazyky mohou mít jiné oddělovače pro vymezení bloku kódu funkce.

    Uvnitř smyčky děláme to samé jako předtím, s několika změnami:

    for (int i = 0; i<5; i++)

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    my_del = my_del - 100;

    O změně záznamu pauzy jsme hovořili výše a změny samotné pauzy se dosáhne snížením proměnné o 100.

    Pro druhou smyčku napíšeme stejný blok kódu, ale proměnnou trvání pauzy zvýšíme o 100.

    for (int i = 0; i<5; i++)

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    Všimli jste si, že záznam poklesu pauzy a jejího zvýšení vypadá jinak. To je také vlastnost jazyka C. I když pro přehlednost měl být tento záznam zopakován, pouze se změní znaménko mínus na plus. Takže dostaneme tento program:

    int ledPin = 13;

    int my_del = 1000;

    pinMode(ledPin, OUTPUT);

    for (int i = 0; i<5; i++)

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    for (int i = 0; i<5; i++)

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    Zkopírujeme kód našeho programu do programu Arduin, zkompilujeme jej a nahrajeme do modulu. Změna délky pauz je patrná. A bude to ještě znatelnější, zkuste, jestli se smyčka for provede třeba 8x.

    To, co jsme právě udělali, dělají profesionální programátoři – máme připravený program, který lze snadno upravit tak, aby vyhovoval vašim potřebám nebo přáním. Proto ukládají všechny své programy. Což vám radím.

    Co nám v našem experimentu uniklo? Naši práci jsme nekomentovali. Pro přidání komentáře se používá buď dvojité "dopředné" lomítko, nebo jednoduché lomítko, ale s hvězdičkami (viz Příloha A). Radím vám, abyste to udělali sami, protože když se po chvíli vrátíte k programu, snáze jej pochopíte, pokud jsou na tom či onom místě v programu vysvětlení toho, co děláte. A také doporučuji ve složce s každým programem uložit jeho popis v obvyklém jazyce, vytvořený v libovolném textovém editoru.

    Nejjednodušší program "blik LED" může sloužit pro tucet dalších experimentů (i s jednou LED). Zdá se mi, že tato část práce, vymýšlení, co jiného se dá dělat zajímavého, je nejzajímavější. Pokud se podíváte na přílohu, kde je popsán programovací jazyk, do části "ovládání programu", pak můžete nahradit smyčku for jiným druhem smyčky. A vyzkoušejte, jak fungují jiné typy cyklů.

    Přestože procesor mikrokontroléru jako každý jiný umí provádět výpočty (proto byl vynalezen), a toho se využívá např. u zařízení, je pro mikrokontrolér nejcharakterističtější operací nastavení výstupu portu na vysokou resp. nízký stav, to znamená „blikání LED“ jako reakce na vnější události.

    O vnějších událostech se mikrokontrolér dozvídá především podle stavu vstupů. Nastavením pinů portu na digitální vstup jej můžeme sledovat. Pokud je počáteční stav vstupu vysoký a událost způsobí, že vstup klesne na nízkou úroveň, můžeme v reakci na tuto událost něco udělat.

    Nejjednodušším příkladem je tlačítko na vstupu. Když není tlačítko stisknuto, vstup je vysoký. Pokud stisknete tlačítko, vstup se sníží a můžeme „rozsvítit“ LED na výstupu. Při příštím stisknutí tlačítka lze LED diodu vypnout.

    Toto je opět příklad jednoduchého programu. I pro začátečníka se to může zdát nezajímavé. I tento jednoduchý program však může být docela užitečný. Uvedu jen jeden příklad: po stisku tlačítka nebudeme LED svítit, ale blikat (určitým způsobem). A vezměme si LED s infračerveným zářením. V důsledku toho získáme ovládací panel. Zde je takový jednoduchý program.

    Existují rozdíly v seznamu příkladů v různých verzích programu. Můžete se ale podívat do jazykové příručky v aplikaci, kde je příklad a schéma programu (v části příklady nazvané „aplikace“) pro práci se vstupem. Zkopíruji program:

    int ledPin = 13;

    pinMode(ledPin, OUTPUT);

    pinMode(inPin, INPUT);

    if (digitalRead(inPin) == VYSOKÉ)

    digitalWrite(ledPin, HIGH);

    digitalWrite(ledPin, LOW);

    A jak vidíte, úpravou toho starého získáme zcela nový program. Nyní bude LED blikat pouze při stisku tlačítka, které je připojeno k pinu 2. Pin 2 je připojen ke společnému vodiči (zem, GND) přes odpor 10 kΩ. Tlačítko je na jednom konci připojeno k napájecímu napětí + 5V a na druhém konci na pin 2.

    V programu se setkáváme s novou jazykovou konstrukcí if ze sekce ovládání programu. Zní takto: pokud je splněna podmínka (v závorkách), provede se programový blok uzavřený ve složených závorkách. Všimněte si, že v podmínce (digitalRead(inPin) == HIGH) se vstup rovná vysokému stavu pomocí dvou rovnátek! Velmi často se na to ve spěchu zapomene a stav se ukáže jako nesprávný.

    Program lze zkopírovat a nahrát do modulu Arduino. Chcete-li však otestovat fungování programu, musíte provést některé změny v návrhu modulu. Záleží však na typu modulu. Originální modul má patice pro připojení k rozšiřujícím deskám. V tomto případě můžete vložit vhodné pevné vodiče do požadovaných míst konektoru. Můj modul má blade kontakty pro připojení k rozšiřujícím deskám. Buď se poohlédnu po vhodném konektoru, nebo, co je levnější, použiji vhodnou patici pro čip v DIP obalu.

    Druhá otázka je, jak najít výstupy modulu, které jsou v programu použity?

    Obrázek, který jsem vzal z webu, pomůže pochopit tuto otázku: http://robocraft.ru/.

    Rýže. 4.1. Umístění a účel pinů ovladače a modulu Arduino

    Všechny piny na mém modulu CraftDuino jsou označené, takže nalezení správného pinu je snadné. Můžete připojit tlačítko a rezistor a zkontrolovat fungování programu. Mimochodem, na zmiňovaném webu RoboCraft je celý proces zobrazen na obrázcích (ale ne úplně takové závěry program používá!). Radím vám podívat se.

    Mnoho mikrokontrolérů má ve svém složení další hardwarová zařízení. Takže Atmega168, na jehož základě je modul Arduino postaven, má UART, vestavěný blok pro komunikaci s jinými zařízeními pomocí sériové výměny dat. Například s počítačem přes COM port. Nebo s jiným mikrokontrolérem pomocí jeho vestavěného bloku UART. K dispozici je také analogově-digitální převodník. A ovladač modulace šířky pulzu.

    Použití posledně jmenovaného ilustruje program, který také zkopíruji z webu RoboCraft. Ale program lze převzít z aplikace. A možná je to v příkladech programu Arduino.

    // Fading LED od BARRAGAN

    int hodnota = 0; // proměnná pro uložení požadované hodnoty

    intledpin = 9; // LED připojená k digitálnímu pinu 9

    // Není třeba volat funkci pinMode

    for(hodnota = 0 ; hodnota<= 255; value+=5) // постепенно зажигаем светодиод

    analogWrite(ledpin, hodnota); // výstupní hodnota (od 0 do 255)

    zpoždění(30); // počkej 🙂

    for(hodnota = 255; hodnota >=0; hodnota-=5) // postupně zhasínat LED

    analogWrite(ledpin, hodnota);

    Jestliže v předchozím programu byla funkce digitalRead(inPin), čtení digitálního vstupu, pro nás novinkou, tak v tomto programu je pro nás nová funkce analogWrite(ledpin, value), ačkoli parametry této funkce jsou již známé proměnné. O použití analogového vstupu, pomocí ADC (analogově-digitální převodník), si povíme později. A nyní se vrátíme k obecným otázkám programování.

    Programování je něco, co je dostupné všem, ale osvojit si programování i jakýkoli programovací jazyk zabere čas. Dnes existuje řada programů, které pomáhají zvládnout programování. A jeden z nich přímo souvisí s modulem Arduino. Jmenuje se Scratch for Arduino, nebo zkráceně S4A. Tento program můžete najít a stáhnout na adrese: http://seaside.citilab.eu/scratch/arduino. Nevím, jak přesně je název programu přeložen, ale „začít od nuly“ se překládá jako „začít od nuly“.

    Stránka projektu S4A má verze pro Windows a Linux, ale pro druhý operační systém je program připraven k instalaci ve verzi distribuce Debian. Nechci tvrdit, že to nejde použít s jinými distribucemi Linuxu, ale nejprve se podívejme, jak se v programu pracuje s modulem Arduino na Windows.

    Po instalaci programu obvyklým způsobem můžete pomocí přepínače jazyků nastavit rozhraní na ruštinu.

    Rýže. 4.2. Přepínač jazyka rozhraní programu

    První ikona panelu nástrojů po kliknutí zobrazí všechny možné jazyky rozhraní programu. Ruský jazyk najdete v sekci ...

    Rýže. 4.3. Seznam jazyků pro použití v rozhraní programu

    …označeno jako „více…“.

    Pokud se nic neudělá, zůstane nápis v pravém okně "Hledácí deska ...", ale modul nebyl nalezen. Chcete-li připojit modul Arduino k programu S4A, musíte si z webu projektu stáhnout něco jiného.

    Rýže. 4.4. Soubor k nahrání do modulu Arduino pro S4A

    Tento soubor není nic jiného než program pro Arduino (Sketch). Tedy textový soubor, který lze zkopírovat do editoru Arduino, zkompilovat a načíst do modulu. Po ukončení programu Arduino můžete spustit program S4A a nyní je modul umístěn.

    Rýže. 4.5. Připojení modulu k programu

    Analogové vstupy modulu nejsou připojeny, stejně jako digitální vstupy, takže hodnoty zobrazené pro modul se neustále náhodně mění.

    Arduino je běžná vývojová deska a velmi jednoduchý programovací jazyk, díky kterému je snadné začít s mikrokontroléry za cenu velikosti a rychlosti programu. Nedávno Atmel přidal podporu pro zavaděč Arduino v AVR Studiu, to znamená, že můžete zapisovat a stahovat programy napsané v C, C ++ nebo Assembler bez programátoru. Navíc můžete v AVR Studiu psát kód v jazyce Processing/Wiring.
    Doporučuji začít číst článek s aktualizací na konci!
    V tomto článku poskytujeme podrobné pokyny pro instalaci programovacího softwaru Arduino pomocí AVR Studio. Jako základ jsme vzali přehled rozšíření AVR Studio z easyelectronics.ru. Všechny příklady spustíme na naší tabuli.

    Instalace Arduino IDE

    Používáme Arduino verze 1.5.2. Stáhnout si jej můžete na oficiálních stránkách. Nejnovější verze (1.6.2-r2 v době psaní tohoto článku) z nějakého důvodu nefunguje s mikrokontrolérem Atmega8.
    Stáhnete si zip archiv s již nasazeným prostředím. Zbývá jej pouze rozbalit do adresáře s programy.

    Instalace Atmel Studio

    UPD

    Vidím, že téma je populární a chtěl bych objasnit několik bodů.
    Existují tři způsoby, jak jsem se pokusil naprogramovat desku kompatibilní s Arduino v C:

    1. Pište přímo v Arduino IDE v C. Musíte pochopit, že Processing / Wiring není jazyk, ale jen sada maker a knihoven. Když do něj zapíšete, podívá se do jeho záhlaví, převede váš lidsky čitelný kód do C a poté jej zkompiluje pomocí standardního kompilátoru AVR GCC. Pokud napíšete kód v C, nebude odkazovat na své knihovny a okamžitě vše zkompiluje, jak má, ALE! ... zatímco linker do vašeho projektu přidá, co chce. Výhodou je, že nepotřebujete nic jiného než Arduino IDE. Nedostatek magie, která je před vývojářem skrytá. Tato metoda se často používá v případech, kdy potřebujete implementovat funkci, kterou naši italští přátelé neposkytli ve svém jazyce.
    2. Metoda navržená v tomto článku (ve skutečnosti nejpodivnější, protože kombinuje všechny nedostatky). Ideologicky je toto rozšíření potřebné pro programování v Processing / Wiring a použití Atmel Studio jako rozhraní. Existuje i placená funkcionalita, která umožňuje ladit kód, ale nezkoušel jsem to. Takže vlastně při programování se vše děje stejně jako v první možnosti, ale pracujete v jiném IDE. Přitom z pohledu výsledku dostanete to samé. Pokud jste naprogramovali Arduino a rozhodli jste se to udělat v C, klidně napište přímo do Arduino IDE. Pokud se vám nelíbí rozhraní, pak můžete použít normální editor (doporučuji Sublime Text). Pokud pracujete v Atnel Studiu a chcete flashovat svou desku přímo z jeho rozhraní nebo do něj napsat Processing/Wiring (najednou!), pak je tento addon právě pro vás. Mimochodem, studio funguje pouze pod Windows, to znamená, že metoda není okamžitě pro každého. Tento článek jsem napsal jen proto, že jsem pro sebe našel nový způsob, ale nelíbí se mi to.
    3. Třetí způsob je podle mého názoru pro pokročilého uživatele nejlepší. Zpočátku vše probíhá jako obvykle – napíšete kód, zkompilujete a získáte hex soubor. Poté, když si pamatujete, že máte v rukou obyčejnou ladicí desku se zavaděčem, stáhnete si utilitu, která má k tomuto zavaděči přístup a přenese váš kód do paměti. Zveřejnili jsme pokyny krok za krokem. V tomto případě získá vývojář maximální kontrolu nad všemi funkcemi, ale mohou nastat problémy kvůli použití bootloaderu třetí strany.

    Rád bych prozradil ještě jednu věc, která se v Arduinu děje. Ať uděláte cokoli, Arduino IDE určitě samo zapne periferie. Například spuštění časovačů. A pokud s nimi chcete pracovat v C, možná zjistíte, že nefungují tak, jak jste očekávali. A to může být skutečný problém. A takových příkladů je mnoho, to znamená, že existuje mnoho potenciálních hrábí, berlí a štěnic.
    Pokud nahrajete pouze hex soubor, problémy mohou nastat pouze kvůli bootloaderu. Zatím jsem našel jen jeden - po dokončení bootloaderu zůstává UART zapnutý. Pokud píšete přes Arduino IDE, tak vám do kódu vloží jeho vypnutí a kdoví co ještě. Pokud chcete jen běžet svůj hex, nezískáte kontrolu nohou UART. Do projektu budete muset ručně přidat vypnutí UART. Tento artefakt a příklady kódu jsou podrobně popsány v .
    No, závěrem. Většina desek kompatibilních s Arduino má konektor pro ISP programátor. Pokud si koupíte tento programátor od Číňanů za 3-4 dolary, rychle na všechny tyto problémy zapomenete.

    Budeme velmi rádi, když podpoříte náš zdroj a navštívíte naši prodejnu.

    První věc, kterou byste měli začít pracovat na zvládnutí Arduina, je zakoupení ladicí desky (bylo by hezké okamžitě zakoupit obvodovou desku atd.). Jaké typy Arduino desek jsou na trhu, jsem již popsal. Pokud jste článek ještě nečetli, doporučuji vám ho přečíst. Pro naučení základů volíme standardní desku Arduino Uno (originál nebo dobrá čínská kopie je na vás). Při prvním připojení původní desky by neměly být žádné problémy, ale s "číňankou" budete muset trochu kopat (nebojte - vše ukážu a řeknu).

    Připojte Arduino k počítači pomocí USB kabelu. LED na desce by se měla rozsvítit. NA". Ve správci zařízení se objeví nové zařízení neznámé zařízení". Musíte nainstalovat ovladač. Zde přidám malý nejasnost(kočka odvedla pozornost - nevzpomněl jsem si, který z řidičů rozhodl " neznámý problém se zařízením».

    Dříve stažený a rozbalený software Arduino ( arduino-1.6.6-windows). Pak si stáhl tento. Je samorozbalovací. Spustil soubor CH341SER.EXE. vybral instalace (INSTALOVAT). Po instalaci se objevila zpráva, klikněte na " OK(neměl jsem čas číst).

    Poté, co jsem přešel do vlastností stále „neznámého zařízení“ a vybral tlačítko „Aktualizovat ovladač“. Vybral jsem možnost "Instalovat ze seznamu nebo zadaného umístění" - označil složku s rozbaleným prostředím softwaru Arduino. A ejhle - všechno fungovalo dobře...

    Spustíme program Arduino (v mém případě 1.6.6) a povolíme přístup.

    Všechny projekty (programy) pro Arduino se skládají ze dvou částí: neplatné nastavení A prázdná smyčka. neplatné nastavení proveden pouze jednou, prázdná smyčka prováděl znovu a znovu.

    Než budeme pokračovat, je třeba provést dva kroky:

    - určete v prostředí softwaru Arduino, kterou desku používáte. Nástroj->deska->Arduino Uno. Pokud je značka již na desce, kterou potřebujete - je to dobré, pokud ne - dejte značku.

    — označte v softwarovém prostředí, který sériový port používáte pro komunikaci s deskou. Nástroj->port->COM3. Pokud je značka již na portu - je to dobré, pokud ne - dejte značku. Pokud máte v sekci portů více portů, jak zjistíte, který z nich se používá k připojení k desce? Vezmeme desku a odpojíme od ní drát. Opět jdeme do přístavů a ​​podíváme se, který zmizel. V mém případě se záložka "porty" stala vůbec neaktivní.

    Znovu připojte kabel USB.

    Pro první program nejsou potřeba žádné další moduly. Rozsvítíme LED, která je již osazena na desce (na 13. výstupu mikrokontroléru).

    Nejprve nakonfigurujeme pin 13 (pro vstup nebo výstup).

    Chcete-li to provést, zadejte do bloku " neplatné nastavení" tým pinMode , v závorce uveďte parametry (13, VÝSTUP) (O jaký výstup se jedná, Provozní režim). Softwarové prostředí zvýrazní slova/příkazy vhodnou barvou písma.

    Přejít na blokování prázdná smyčka“ a zadejte příkaz digitalWrite s parametry (13, VYSOKÁ) .


    První program je připraven, nyní jej zbývá stáhnout do mikrokontroléru. Stiskněte tlačítko UPLOAD.

    LED se rozsvítila. Ale nebuďte tak skeptičtí ohledně jednoduchosti prvního programu. Právě jste zvládli první ovládací povel. Místo LED můžete koneckonců připojit jakoukoli zátěž (ať už je to osvětlení v místnosti nebo servo, které vypíná přívod vody), ale o tom všem si povíme později ...

    Rozsvítili jsme LED, trochu svítila, je čas ji vypnout. Za tímto účelem upravíme program, který jsme napsali. Namísto " VYSOKÝ " napsat " NÍZKÝ ».


    Stiskněte tlačítko UPLOAD. LED nesvítí.

    S pojmem "" jsme se již setkali, je čas jej použít. Další programy budou větší a složitější a práce na jejich změně zabere stále více času, pokud opustíme tento styl psaní kódu.

    Podíváme se na program (znovu rozsvítíme LED). Nastavme číslo pinu mikrokontroléru, nikoli číslo 13 , ale proměnná, které bude přiřazena hodnota odpovídajícího výstupu (v našem případě 13). V budoucnu bude velmi výhodné změnit hodnoty proměnných na začátku programu, místo toho, abyste se prohrabávali kódem a hledali místa, kde je potřeba hodnoty změnit.

    Vytvořte globální proměnnou int LED_pin = 13; (typ proměnné, název proměnné, hodnota k ní přiřazená).


    Stiskněte tlačítko UPLOAD. LED se rozsvítí. Vše funguje perfektně.

    V této lekci se kromě rozsvícení / zhasnutí LED diody také naučíme, jak ji blikat.

    Chcete-li to provést, zadejte druhý příkaz " digitalWrite» s parametry (LED kolík, NÍZKÁ).


    Stiskněte tlačítko UPLOAD. A co vidíme? LED svítí „na podlaze mandátu“. Důvod spočívá ve skutečnosti, že doba sepnutí dvou stavů ( VYSOKÝ A NÍZKÝ ) je zanedbatelný a lidské oko toto přepínání nedokáže detekovat. Je nutné zvýšit čas strávený LED v některém ze stavů. Za tímto účelem napíšeme příkaz zpoždění s parametrem (1000 ) . Zpoždění v milisekundách: 1000 milisekund - 1 sekunda. Algoritmus programu je následující: zapněte LED - počkejte 1 sekundu, vypněte LED - počkejte 1 sekundu atd.


    Stiskněte tlačítko UPLOAD. LED začala blikat. Všechno funguje.

    Dokončíme program vytvořením proměnné, které bude přiřazena hodnota, která je zodpovědná za dobu zpoždění.


    Stiskněte tlačítko UPLOAD. LED dioda bliká, když bliká.

    Pojďme dokončit program, který jsme napsali. Úkoly jsou:

    • LED svítí 0,2 sekundy a nesvítí 0,8 sekundy;
    • LED svítí 0,7 sekundy a nesvítí 0,3 sekundy.

    Program má 2 proměnné, které jsou zodpovědné za časová zpoždění. Jedna určuje dobu, kdy LED svítí, a druhá určuje dobu, kdy je LED zhasnutá.

    Děkuji za pozornost. Brzy se uvidíme!

    Programovací jazyk Arduino pro začátečníky je podrobně popsán v tabulce níže. Mikrokontrolér Arduino je naprogramován ve speciálním programovacím jazyce založeném na C/C++. Programovací jazyk Arduino je variací C++, jinými slovy, pro Arduino neexistuje samostatný programovací jazyk. Knihu ve formátu PDF si můžete stáhnout ve spodní části stránky.

    V Arduino IDE jsou všechny napsané skici kompilovány do programu C/C++ s minimálními změnami. Kompilátor Arduino IDE výrazně zjednodušuje psaní programů pro tuto platformu a vytváření zařízení na Arduinu se stává mnohem dostupnější pro lidi, kteří nemají mnoho znalostí v jazyce C/C++. Dále poskytneme malou nápovědu popisující hlavní funkce jazyka Arduino s příklady.

    Podrobná reference jazyka Arduino

    Jazyk lze rozdělit do čtyř sekcí: operátory, data, funkce a knihovny.

    jazyk Arduino Příklad Popis

    Operátoři

    založit() void setup()
    {
    pinMode(3, INPUT);
    }
    Funkce slouží k inicializaci proměnných, určení provozních režimů pinů na desce atd. Funkce se spustí pouze jednou, po každém zapnutí mikrokontroléru.
    smyčka() void loop()
    {
    digitalWrite(3, VYSOKÝ);
    zpoždění(1000);
    digitalWrite(3, NÍZKÁ);
    zpoždění(1000);
    }
    Funkce smyčky se zacyklí, což umožňuje programu provádět výpočty a reagovat na ně. Funkce setup() a loop() musí být přítomny v každé skice, i když tyto příkazy nejsou v programu použity.

    Kontrolní výkazy

    -li
    if(x >
    pokud (x< 100) digitalWrite (3, LOW );
    Příkaz if se používá ve spojení s operátory porovnání (==, !=,<, >) a zkontroluje, zda je podmínka pravdivá. Pokud je například hodnota proměnné x větší než 100, pak se LED na výstupu 13 rozsvítí, pokud je menší, LED zhasne.
    kdyby..jinak
    if (x > 100) digitalWrite (3, HIGH );
    else digitalWrite(3, LOW);
    Příkaz else vám umožňuje provést jinou kontrolu než tu uvedenou v if, aby bylo možné provést několik vzájemně se vylučujících kontrol. Pokud není žádná z kontrol PRAVDA, provede se blok příkazů v else.
    vypínač… pouzdro
    přepínač (x)
    {


    případ 3: break ;

    }
    Podobně jako if, příkaz switch řídí program a umožňuje vám specifikovat akce, které se kdy provedou různé podmínky. Break je příkaz ukončení příkazu, výchozí se provede, pokud není vybrána žádná alternativa.
    pro void setup()
    {
    pinMode(3, OUTPUT);
    }
    void loop()
    {
    for (int i=0; i<= 255; i++){
    analogWrite(3, i);
    zpoždění(10);
    }
    }
    Konstrukt for se používá k opakování příkazů uzavřených ve složených závorkách. Například plynulé stmívání LED. Hlavička smyčky for se skládá ze tří částí: for (inicializace; podmínka; přírůstek) - inicializace se provede jednou, poté se kontroluje podmínka podmínky, pokud je podmínka pravdivá, přírůstek se inkrementuje. Cyklus se opakuje, dokud se podmínka nestane nepravdivou.
    zatímco void loop()
    {
    zatímco (x< 10)
    {
    x = x + 1;
    Serial.println(x);
    zpoždění(200);
    }
    }
    Příkaz while se používá jako smyčka, která poběží tak dlouho, dokud platí podmínka v závorkách. V příkladu bude příkaz while opakovat kód v závorkách neomezeně dlouho, dokud je x menší než 10.
    dělat, zatímco void loop()
    {
    dělat
    {
    x = x + 1;
    zpoždění(100);
    Serial.println(x);
    }
    zatímco (x< 10);
    zpoždění(900);
    }
    Příkaz cyklu do...while funguje stejně jako cyklus while. Pokud je však výraz v závorkách pravdivý, smyčka pokračuje, nikoli ji opouští. Ve výše uvedeném příkladu pro x větší než 10 bude operace sčítání pokračovat, ale s pauzou 1000 ms.
    přestávka
    pokračovat
    přepínač (x)
    {
    případ 1: digitalWrite(3, HIGH);
    případ 2: digitalWrite(3, LOW);
    případ 3: break ;
    případ 4: pokračovat ;
    výchozí : digitalWrite(4, HIGH);
    }
    Přestávka se používá k vynucení opuštění smyček switch, do, for a while bez čekání na dokončení smyčky.
    Příkaz continue přeskočí zbývající příkazy v kroku aktuální smyčky.

    Syntax

    ;
    (středník)

    digitalWrite(3, VYSOKÝ);
    Středník se používá k označení konce příkazu. Středník vynechaný na konci řádku vede k chybě při kompilaci.
    {}
    (rovnátky)
    void setup()
    {
    pinMode(3, INPUT);
    }
    Za otevírací závorkou „(“ musí následovat uzavírací závorka „“)“. Nespárované závorky mohou vést ke skrytým a nepochopitelným chybám při sestavování náčrtu.
    //
    (komentář)
    x=5; // komentář