• V jakém programu naprogramovat arduino. Arduino pro začátečníky: pokyny krok za krokem. Programování a projekty Arduina: Začínáme

    Z čeho se program skládá

    Pro začátek stojí za to pochopit, že program nelze číst a psát jako knihu: od obalu k obalu, shora dolů, řádek po řádku. Každý program se skládá ze samostatných bloků. Začátek bloku kódu v C/C++ je označen levou složenou závorkou ( , jeho konec pravou složenou závorkou ) .

    Bloky jsou odlišné typy a který z nich bude proveden, když závisí na vnějších podmínkách. V příkladu minimální program můžete vidět 2 bloky. V tomto příkladu jsou volány bloky definice funkce. Funkce je pouze blok kódu s daným názvem, který pak může použít někdo jiný zvenčí.

    V tento případ máme 2 funkce s názvem setup a loop. Jejich přítomnost je povinná v každém programu C++ pro Arduino. Nesmí nic dělat, jako v našem případě, ale musí být napsány. V opačném případě se ve fázi kompilace zobrazí chyba.

    Klasický žánr: blikající LED

    Pojďme nyní dokončit náš program, aby se alespoň něco stalo. Na Arduinu je LED připojena na 13. pin. Dají se ovládat, což uděláme.

    void setup() ( pinMode(13, OUTPUT) ; ) void loop() ( digitalWrite(13, HIGH) ; delay(100) ; digitalWrite(13, LOW) ; delay(900) ; )

    Zkompilujte, stáhněte si program. Uvidíte, že každou sekundu LED na desce bliká. Pojďme zjistit, proč tento kód vede k blikání každou sekundu.

    Každý výraz je příkazem pro procesor, aby něco udělal. Výrazy v rámci jednoho bloku jsou prováděny jeden po druhém, přísně v pořadí bez jakýchkoli pauz a přepínání. To znamená, že pokud mluvíme o jednom konkrétním bloku kódu, lze jej číst shora dolů, abychom pochopili, co se dělá.

    Nyní pochopíme, v jakém pořadí se provádějí samotné bloky, tzn. funkce nastavení a smyčky. Zatím nepřemýšlejte, co konkrétní výrazy znamenají, pouze dodržujte pořadí.

      Jakmile se Arduino zapne, zabliká nebo se stiskne tlačítko RESET, „něco“ volá funkci založit. To znamená, že vynutí provedení výrazů v něm.

      Jakmile je nastavení dokončeno, okamžitě „něco“ zavolá funkci smyčky.

      Jakmile je práce smyčky dokončena, okamžitě „něco“ znovu zavolá funkci smyčky a tak dále do nekonečna.

    Pokud očíslujeme výrazy v pořadí, v jakém jsou provedeny, dostaneme:

    void setup() ( pinMode(13 , OUTPUT) ; ❶ ) void loop() ( digitalWrite(13, HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13, LOW) ; ❽ (0) 9 delay ; ❺ ❾ )

    Ještě jednou připomínáme, že byste se neměli snažit vnímat celý program čtením odshora dolů. Shora dolů se čte pouze obsah bloků. Obecně můžeme změnit pořadí nastavení a deklarací smyčky.

    void loop() ( digitalWrite(13 , HIGH) ; ❷ ❻ ❿ delay(100 ) ; ❸ ❼ … digitalWrite(13 , LOW) ; ❹ ❽ delay(900 ) ; ❺ ❾ ( UT pine setup(OUT) void setup(P1) ); ❶)

    Výsledek to nezmění ani trochu: po kompilaci získáte naprosto ekvivalent binární soubor.

    Co dělají výrazy

    Nyní se pokusme pochopit, proč napsaný program vede k blikání LED.

    Jak víte, piny Arduino mohou fungovat jako výstupy i vstupy. Když chceme něco ovládat, tedy vydat signál, musíme převést ovládací pin do výstupního stavu. V našem příkladu přivádíme LED na kolík 13, takže kolík 13 musí být před použitím vytvořen jako výstup.

    To se provádí výrazem ve funkci nastavení:

    PinMode(13, OUTPUT) ;

    Výrazy jsou různé: aritmetika, deklarace, definice, podmínky atd. V tomto případě implementujeme do výrazu volání funkce. Pamatovat si? My máme jejich funkce setup a loop, které jsou volány něčím, čemu jsme říkali „něco“. Tak teď My voláme funkce, které jsou již někde napsány.

    Konkrétně v našem nastavení voláme funkci s názvem pinMode . Nastaví pin určený číslem na zadaný režim: vstup nebo výstup. O jaký pin a o jaký režim mluvíme, uvádíme v závorce oddělené čárkou hned za názvem funkce. V našem případě chceme, aby 13. pin fungoval jako výstup. OUTPUT znamená výstup, INPUT znamená vstup.

    Jsou volány kvalifikační hodnoty jako 13 a OUTPUT argumenty funkce. Není nutné, aby všechny funkce měly 2 argumenty. Kolik argumentů funkce má, závisí na podstatě funkce, na tom, jak ji autor napsal. Mohou existovat funkce s jedním argumentem, třemi, dvaceti; Funkce nemohou mít vůbec žádné argumenty. K jejich vyvolání se závorka otevře a okamžitě zavře:

    NoInterrupts() ;

    Ve skutečnosti jste si mohli všimnout, že ani naše funkce nastavení a smyčky neberou žádné argumenty. A to tajemné „něco“ je v pravý čas jen zavolá prázdnými závorkami.

    Vraťme se k našemu kódu. Takže, protože plánujeme blikat LED navždy, je potřeba z ovládacího pinu jednou udělat výstup a pak si to nechceme pamatovat. Funkce setup je k tomu ideologicky navržena: nastavte desku podle potřeby, abyste s ní mohli později pracovat.

    Přejděme k funkci smyčky:

    void loop() ( digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(900) ; )

    Jak již bylo zmíněno, volá se ihned po nastavení. A volá se znovu a znovu, jakmile skončí. Funkce smyčky se nazývá hlavní smyčka programu a je ideologicky navržena tak, aby vykonávala užitečnou práci. V našem případě užitečná práce- blikající LED.

    Projdeme si výrazy popořadě. První výraz je tedy volání vestavěné funkce digitalWrite. Je navržen tak, aby dodal logickou nulu (LOW, 0 voltů) nebo logickou jedničku (HIGH, 5 voltů) danému pinu. 2 argumenty jsou předány funkci digitalWrite: číslo pinu a booleovský. V důsledku toho první věc, kterou uděláme, je rozsvícení LED na 13. kolíku přivedením 5 voltů na něj.

    Jakmile je toto provedeno, procesor okamžitě přejde k dalšímu výrazu. Pro nás je to volání funkce zpoždění. Funkce zpoždění je opět vestavěná funkce, která způsobí, že procesor po určitou dobu uspí. Chce to jen jeden argument: čas v milisekundách do spánku. V našem případě je to 100 ms.

    Zatímco spíme, vše zůstává tak, jak je, tzn. LED dioda stále svítí. Jakmile uplyne 100 ms, procesor se probudí a okamžitě přejde na další výraz. V našem příkladu se opět jedná o volání známé vestavěné funkce digitalWrite. Pravda, tentokrát jako druhý argument předáme hodnotu LOW. To znamená, že na 13. pinu nastavíme logickou nulu, to znamená, že aplikujeme 0 voltů, to znamená, že vypneme LED.

    Po zhasnutí LED přistoupíme k dalšímu výrazu. Opět se jedná o volání funkce zpoždění. Tentokrát spíme 900 ms.

    Jakmile spánek skončí, funkce smyčky skončí. Po dokončení to „něco“ okamžitě znovu zavolá a vše se stane znovu: LED se rozsvítí, spálí, zhasne, čeká atd.

    Pokud přeložíte to, co je napsáno do ruštiny, získáte následující algoritmus:

      Zapálili jsme LED

      Spánek 100 milisekund

      Zhasneme LED

      Spánek 900 milisekund

      Přejděte k bodu 1

    Takže jsme dostali Arduino s majákem blikajícím každých 100 + 900 ms = 1000 ms = 1 sec.

    Co lze změnit

    Využijme pouze nabyté znalosti k vytvoření několika variant programu, abychom lépe porozuměli principu.

    K jinému pinu můžete připojit externí LED nebo jiné zařízení, které potřebuje „blikat“. Například dne 5. Jak by se měl v tomto případě změnit program? Musíme nahradit číslo 5. všude tam, kde jsme se obrátili na 13. kolík:

    Zkompilujte, stáhněte, otestujte.

    Co je třeba udělat, aby LED blikala 2x za sekundu? Zkraťte dobu spánku tak, aby celková doba byla 500 ms:

    void setup() ( pinMode(5, OUTPUT) ; ) void loop() ( digitalWrite(5, HIGH) ; delay(50) ; digitalWrite(5, LOW) ; delay(450) ; )

    Jak mohu přimět LED, aby při každém "mrknutí" dvakrát blikla? Musíte jej zapálit dvakrát s krátkou pauzou mezi inkluzemi:

    void setup() ( pinMode(5, OUTPUT) ; ) void loop() ( digitalWrite(5, HIGH) ; delay(50) ; digitalWrite(5, LOW) ; delay(50 ) ; digitalWrite(5, HIGH) ; zpoždění (50 ); digitalWrite(5 , LOW) ; delay(350) ; )

    Jak udělat, aby zařízení mělo 2 LED diody, které by střídavě blikaly každou sekundu? Musíte komunikovat se dvěma piny a pracovat ve smyčce s jedním nebo druhým:

    void setup() ( pinMode(5, OUTPUT) ; pinMode(6, OUTPUT) ; ) void loop() ( digitalWrite(5, HIGH) ; delay(100) ; digitalWrite(5, LOW) ; delay(900) ; digitalWrite (6 , HIGH) ; delay(100 ) ; digitalWrite(6 , LOW) ; delay(900 ) ; )

    Jak docílit toho, aby zařízení mělo 2 LED, které by se spínaly na způsob železničního semaforu: svítila by jedna nebo druhá? Jen nemusíte zhasínat hořící LED přímo tam, ale počkat na okamžik přepnutí:

    void setup() ( pinMode(5, OUTPUT) ; pinMode(6, OUTPUT) ; ) void loop() ( digitalWrite(5, HIGH) ; digitalWrite(6, LOW) ; delay(1000); digitalWrite(5, LOW) ; digitalWrite(6 , HIGH) ; delay(1000) ; )

    Další nápady si klidně ověřte sami. Jak vidíte, vše je jednoduché!

    O prázdném prostoru a krásném kódu

    V C++ mezery, konce řádků a znaky tabulátoru nemají velký význam pro kompilátor. Kde je mezera, může být zalomení řádku a naopak. Ve skutečnosti je 10 mezer za sebou, 2 konce řádků a 5 dalších mezer ekvivalentem jedné mezery.

    White space je programátorský nástroj, pomocí kterého můžete program buď učinit srozumitelným a vizuálním, nebo jej zmrzačit k nepoznání. Zvažte například program pro blikání LED:

    void setup() ( pinMode(5, OUTPUT) ; ) void loop() ( digitalWrite(5, HIGH) ; delay(100) ; digitalWrite(5, LOW) ; delay(900) ; )

    Můžeme to změnit takto:

    void setup() ( pinMode(5, OUTPUT) ; ) void loop () ( digitalWrite(5,HIGH) ; delay(100) ; digitalWrite(5,LOW) ; delay(900) ; )

    Vše, co jsme udělali, je trochu „pracovat“ s prázdným prostorem. Nyní můžete jasně vidět rozdíl mezi dobře tvarovaným kódem a nečitelným.

    Chcete-li se řídit nevysloveným zákonem softwarového designu, který je respektován na fórech, když ho ostatní lidé snadno vnímají, dodržujte několik jednoduchých pravidel:

    1. Vždy na začátku nového bloku mezi ( a ) zvětšete odsazení. Obvykle se používají 2 nebo 4 mezery. Vyberte si jednu z hodnot a držte se jí.

    Špatně:

    void loop() ( digitalWrite(5 , HIGH) ; delay(100 ); digitalWrite(5 , LOW) ; delay(900) ; )

    Pokuta:

    void loop() ( digitalWrite(5 , HIGH) ; delay(100 ); digitalWrite(5 , LOW) ; delay(900) ; )

    2. Jako v přirozeném jazyce: za čárkami dejte mezeru a před ne.

    Špatně:

    DigitalWrite(5 ,HIGH) ; digitalWrite(5 , HIGH) ; digitalWrite(5 ,HIGH) ;

    Pokuta:

    DigitalWrite(5 , HIGH) ;

    3. Umístěte znak začátku bloku ( on nový řádek na aktuální úrovni odsazení nebo na konci předchozího. A znak konce bloku ) na samostatném řádku na aktuální úrovni odsazení:

    Špatně:

    void setup() ( pinMode(5, OUTPUT) ; ) void setup() ( pinMode(5, OUTPUT) ; ) void setup() ( pinMode(5, OUTPUT) ; )

    Pokuta:

    void setup() ( pinMode(5, OUTPUT) ; ) void setup() ( pinMode(5, OUTPUT) ;)

    4. K oddělení sémantických bloků použijte prázdné řádky:

    Pokuta:

    Lepší:

    void loop() ( digitalWrite(5 , HIGH) ; delay(100 ) ; digitalWrite(5 , LOW) ; delay(900 ) ; digitalWrite(6, HIGH) ; delay(100 ) ; digitalWrite(6, LOW) ; delay( 900 ;)

    O střednících

    Možná se ptáte: proč je na konci každého výrazu středník? To jsou pravidla C++. Taková pravidla se nazývají syntaxe jazyka. Podle symbolu; kompilátor rozumí, kde výraz končí.

    Jak již bylo zmíněno, zalomení řádků je pro něj prázdnou frází, proto se zaměřuje na toto interpunkční znaménko. To vám umožní napsat několik výrazů najednou na jeden řádek:

    void loop() ( digitalWrite(5 , HIGH) ; delay(100 ); digitalWrite(5 , LOW) ; delay(900) ; )

    Program je správný a ekvivalentní tomu, co jsme již viděli. Psaní takto je však špatná forma. Kód je mnohem obtížnější přečíst. Pokud tedy nemáte 100% dobrý důvod psát více prohlášení na stejný řádek, nedělejte to.

    O komentářích

    Jedno z pravidel dobrého programování zní: „Pište kód tak, aby byl tak jasný, že jej není třeba vysvětlovat. Je to možné, ale ne vždy. Abychom čtenářům vysvětlili některé nesamozřejmé body kódu: svým kolegům nebo vám za měsíc, existují takzvané komentáře.

    Jedná se o návrhy in programový kód, které jsou kompilátorem zcela ignorovány a jsou relevantní pouze pro čtenáře. Komentáře mohou být víceřádkové nebo jednořádkové:

    /* Funkce nastavení je volána jako první, když je Arduino zapnuto. Toto je víceřádkový komentář */ void setup()( // nastavení pinu 13 do výstupního režimu pinMode(13, OUTPUT) ; ) void loop() ( digitalWrite(13, HIGH) ; delay(100); // uspání 100 ms digitalWrite(13, LOW) ; delay(900) ; )

    Jak vidíte, mezi znaky /* a */ můžete napsat libovolný počet řádků komentářů. A po sekvenci / / je vše, co následuje až do konce řádku, považováno za komentář.

    Doufáme tedy, že nejzákladnější principy psaní programů jsou jasné. Získané znalosti umožňují programově řídit napájení pinů Arduina podle určitých časových schémat. To není tolik, ale na první pokusy to stále stačí.

    Ardublock je grafický programovací jazyk pro Arduino určený pro začátečníky. Toto prostředí se docela snadno používá, snadno se instaluje, je téměř kompletně přeloženo do ruštiny. Vizuálně vytvořený program připomínající bloky...

    Přerušení jsou velmi důležitým mechanismem Arduina, který umožňuje externím zařízením interakci s ovladačem, když nastanou různé události. Instalací hardwarové obsluhy přerušení do náčrtu můžeme reagovat na zapnutí nebo vypnutí tlačítka, stisknutí klávesnice, ...

    Serial.print() a Serial.println() jsou hlavní funkce Arduina pro přenos informací z desky Arduino do počítače prostřednictvím sériový port. Nejoblíbenější desky Arduino Uno, Mega, Nano nemají vestavěný displej, takže...

    Je možné dělat arduino projekty bez samotné arduino desky? Ukazuje se docela. Díky četným online služby a programy, které mají svůj vlastní název: Arduino emulátor nebo simulátor. Nejoblíbenějšími zástupci takových programů jsou ...

    Sériový začátek - extrémně důležitý pokyn Arduino, umožňuje ovladači navázat spojení s externími zařízeními. Nejčastěji takové externí zařízení“ se ukáže jako počítač, ke kterému připojíme Arduino. Proto je Serial begin intenzivnější...

    Globální proměnná v Arduinu je proměnná, jejíž rozsah zasahuje do celého programu, je viditelná ve všech modulech a funkcích. V tomto článku se podíváme na několik příkladů použití globálních proměnných,...

    Pole Arduino jsou jazykový prvek aktivně používaný programátory pro práci se sadami stejného typu dat. Pole existují téměř ve všech programovacích jazycích a Arduino není výjimkou, jehož syntaxe je velmi podobná ...

    Programovací jazyk Arduino pro začátečníky je podrobně popsán v tabulce níže. Mikrokontrolér Arduino je naprogramován pomocí speciální jazyk programování založené na C/C++. Jazyk Programování Arduina je variantou C++, jinými slovy neexistuje žádný samostatný programovací jazyk pro Arduino. Stažení Kniha PDF k dispozici na konci stránky.

    V Arduino IDE všechny psané náčrty jsou 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ář

    Ahoj! Jsem Alikin Alexander Sergeevich, učitel dalšího 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ém způsobu programování Arduina pomocí programu ArduBloсk.

    Zavedl jsem tento program do vzdělávacího procesu a jsem z výsledku nadšený, je mezi dětmi zvláště žádaný, zejména při psaní jednoduchých programů nebo při vytváření nějaké počáteční fáze složitých programů. 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 kabelu. 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í.

    Ani známí LEGO roboti, jako je NXT nebo EV3, již nejsou pro naše studenty s příchodem programu ArduBloсk v programování Arduino tak zajímaví. 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.

    Takže máte procesor. Asi chápete, že procesor lze nějak naprogramovat, aby dělal, co chcete. Aby mohla být vykonána užitečná práce, musí se (a) psát užitečný program a (b) předat jej zpracovateli k provedení.

    Obecně platí, že bez ohledu na to, jaký máte procesor: nejnovější Intel Pentium ve vašem notebooku nebo mikrokontroléru na desce Arduino. Principy psaní programu, tzn. programování jsou v obou případech stejné. Jediným rozdílem je rychlost a rozsah možností pracovat s jinými zařízeními.

    Co je to program a kam ho napsat

    Procesor je i přes náročnost výroby ve své podstatě vcelku jednoduchá a přímočará věc. Neví, jak myslet. Může pouze slepě, bajt po bajtu, provádět instrukce, které mu byly podány. Zde je hrubý příklad posloupnosti pokynů:

    Instrukční bajtCo to znamená pro procesor
    00001001 znamená: vzít další bajt a uložit jej do buňky číslo 1
    00000110 ... toto je jen další bajt, který si pamatujeme v buňce číslo 1: číslo 5
    00011001 znamená: odečtěte jedničku od hodnoty v buňce 1 a ponechte tam aktualizovaný výsledek
    00101001 znamená: porovnejte hodnotu v buňce číslo 1 s nulou a pokud je nula - přeskočte o tolik bajtů, kolik je uvedeno v dalším bajtu
    00000100 …pokud byl výsledek nula, chceme skočit o 4 bajty na předposlední instrukci
    10000011
    01000001 ... písmeno "A" právě odpovídá tomuto kódu
    00101000 znamená, že chceme skočit zpět o tolik bajtů, kolik je další bajt
    00000110 ...skočíme o 6 bajtů zpět, na pokyn č. 3
    10000011 znamená, že chceme zobrazit znak, jehož kód je zapsán v dalším bajtu
    00100001 ... podepsat "!" odpovídá pouze tomuto kódu

    V důsledku provedení takové sekvence pokynů se na obrazovce zobrazí panická fráze „AAAA!“.

    Docela hodně kódu pro tak jednoduchý cíl! Je jasné, že pokud by byly všechny programy napsány takto, přímo, vývoj složitých produktů by trval staletí.

    Proč jsou potřeba programovací jazyky

    Aby se tento úkol milionkrát zjednodušil, byly vynalezeny programovací jazyky. Existuje mnoho z nich a dokonce i těch, které neustále slyšíte, si můžete rychle vybavit tucet nebo dva: Assembler, C, C++, C #, Java, Python, Ruby, PHP, Scala, JavaScript.

    Programy v těchto jazycích jsou mnohem blíže lidskému přirozenému jazyku. A proto se píší snadněji, rychleji a příjemněji a hlavně jsou mnohem jednodušší číst: Vám ihned po napsání, Vám za rok nebo Vašemu kolegovi.

    Problém je v tom, že takové jazyky nejsou pro procesor srozumitelné a než mu dáte tento program, musí být kompilovat: přeložte z přirozeného jazyka do stejných pokynů ve formě nul a jedniček. K tomu slouží programy tzv kompilátory. Každý jazyk, pokud nezůstal na úrovni fantazie, má svůj vlastní překladač. U populárních jazyků je obvykle na výběr několik různých výrobců a pro různé platformy. Většina z nich je volně dostupná na internetu.

    Existují tedy programy v jazyce, který je pro člověka docela srozumitelný: také se jim říká „zdrojový kód“, jednoduše „kód“ nebo „zdrojové kódy“. Jsou psány jednoduše textové soubory používáním žádný textový editor, dokonce i s poznámkovým blokem. Poté jsou pomocí kompilátoru převedeny na sady nul a jedniček srozumitelné procesoru: kompilátor obdrží jako vstup zdroj a na výstupu vytvoří binární spustitelný soubor , který rozumí zpracovatel.

    Binární soubory nejsou čitelné a jsou obecně určeny pouze ke spuštění procesorem. Mohou mít jiný typ podle toho, za co byly přijaty: .exe - jedná se o programy pro Windows, .hex - programy pro spuštění mikrokontrolérem jako je Arduino atd.

    Proč existuje tolik programovacích jazyků a jaký je rozdíl?

      Proč? Protože na Zemi je mnoho lidí a společností a mnozí věřili, že to dokážou lépe než kdokoli jiný: pohodlněji, přehledněji, rychleji, štíhleji.

      Jaký je rozdíl: různé jazyky mají různou rovnováhu mezi rychlostí zápisu, čitelností a rychlostí provádění.

    Podívejme se na stejný program, který na obrazovce zobrazuje písničku o 99 lahvích piva. různé jazyky programování.

    Například jazyk Perl. Napsáno rychle; je nemožné pochopit, co tím programátor myslel; prováděno pomalu:

    sub b( $n = 99 - @_ - $_ || Ne; "$n láhev" . "s" x!!-- $n . " piva" ); $w = "na zdi" ; mapa ( b. "$w, \n". b. ", \n Sundej jeden dolů, dej si ho kolem,\n ". b(0) . "$w. \n\n"} 0 .. 98

    jazyk Java. Píše se poměrně dlouho; snadné čtení; provádí se poměrně rychle, ale zabírá hodně paměti:

    třídy lahví ( public static void main( Tětiva argumenty) ( Tětiva s = "s" ; pro (int piva= 99 ; piva>- 1 ; ) ( Systém.out .print (piva + " láhev" + s + " piva na zeď, " ) ; Systém.out .println (piva + " láhev" + s + " piva, " ) ; if (piva== 0) ( Systém.out .print( "Jděte do obchodu, kupte si další,") ; Systém.out .println ( "99 lahví piva na zdi."\n ") ; Systém.exit(0) ; ) jinak Systém.out .print( "Sundej jednu dolů, dej to kolem,"); s = (-- piva == 1) ? "" : "s" ; Systém.out .println(piva + "lahev" + s + " piva na zdi."\n ") ; } } }

    jazyk symbolických instrukcí. Píše se dlouho; obtížné čtení; běží velmi rychle:

    segment kódu předpokládat cs : kód , ds : kód org 100h start : ; Hlavní smyčka mov cx , 99 ; lahve pro začátek s loopstart: call printcx ; vytisknout číslo mov dx , offset line1 ; vytisknout zbytek prvního řádku mov ah , 9 ; MS-DOS tiskový řetězec rutina int 21h volání printcx ; vytisknout číslo mov dx , offset řádek2_3 ; zbytek 2. a 3. řádku mov ah , 9 int 21h dec cx ; přijmout jedno volání printcx ; vytisknout číslo mov dx , offset line4 ; vytiskněte zbytek čtvrtého řádku mov ah , 9 int 21h cmp cx , 0 ; Došlo pivo? jne loopstart ; pokud ne, pokračujte do 20h ; ukončete MS-DOS ; podprogram pro tisk registru CX v desítkové soustavě printcx: mov di , offset numbufferend ; naplňte zásobník od konce mov ax, cx ; vložte číslo do AX, abychom ho mohli rozdělit printcxloop: mov dx, 0 ; slovo čitatele vysokého řádu - vždy 0 mov bx, 10 div bx ; vydělte DX:AX 10. AX=podíl, DX=zbytek přidat dl, "0" ; převést zbytek na znak ASCII mov [ds : di] , dl ; vložte jej do tiskového bufferu cmp ax , 0 ; Nějaké další číslice k výpočtu? je printcxend; pokud ne, konec dec di ; vložte další číslici před aktuální jmp printcxloop; smyčka printcxend: mov dx , di ; tisk, počínaje poslední vypočítanou číslicí mov ah , 9 int 21h ret ; Datová linka1 db "lahve piva na zdi,", 13 , 10 , "$" line2_3 db "lahve piva," , 13 , 10 , "Sundej jednu dolů, dej to kolem,", 13 , 10 , "$" řádek4 db "lahve piva na zdi.", 13 , 10 , 13 , 10 , "$" numbuffer db 0 , 0 , 0 , 0 , 0 numbufferend db 0 , "$" kód končí konec začátek

    Jak se Arduino programuje?

    Když už jsme u Arduina nebo mikrokontrolérů od Atmelu, v jakém jazyce se pro ně dají psát programy? Teoretická odpověď: na jakékoli. Ale v praxi je výběr omezen na Assembler, C a C++. To je způsobeno tím, že ve srovnání s stolní počítač mají velmi omezené zdroje. Kilobajty paměti, ne gigabajty. Megahertz na procesoru, ne gigahertz. To je cena za levnost a energetickou účinnost.

    Potřebujete tedy jazyk, který lze efektivně zkompilovat a spustit. Tedy překládat do těch samých nul a jedniček z instrukcí co nejoptimálněji, bez utrácení drahocenných instrukcí a prázdné paměti. Tyto jazyky jsou stejně účinné. Pomocí nich můžete psát programy bohaté na funkce, které běží rychle, dokonce i v rámci úzkých limitů zdrojů mikrokontroléru.

    Assembler, jak jste viděli, není nejjednodušší a nejelegantnější, a proto je C/C++ vlajkovou lodí pro Arduino.

    Mnoho zdrojů uvádí, že Arduino je naprogramováno jazyk Arduino, Zpracování, Elektroinstalace. To není úplně správné tvrzení. Arduino je naprogramováno v C / C ++ a to, co se těmito slovy nazývá, je jen pohodlný „body kit“, který vám umožní vyřešit mnoho typických úkolů, aniž byste museli pokaždé znovu vynalézat kolo.

    Proč jsou C a C++ zmíněny ve stejné větě? C++ je doplněk k C. Každý program C je správný program pro C++, ale ne naopak. Můžete použít obojí. Nejčastěji vás při řešení aktuálního problému ani nenapadne, co používáte.

    Jděte k věci: první program

    Pojďme napsat první program pro Arduino a nechat jej spustit desku. Je třeba vytvořit textový soubor se zdrojovým kódem, zkompilovat jej a výsledný binární soubor umístit na mikrokontrolér na desce.

    Jdeme popořadě. Pojďme napsat zdrojový kód. Můžete to napsat do poznámkového bloku nebo jiného editoru. Aby však byla práce pohodlná, existují tzv. vývojová prostředí (IDE: Integrated Development Environment). Poskytují ve formě jediného nástroje a textový editor se zvýrazňováním a nápovědou a kompilátor spouštěný tlačítkem a mnoho dalších radostí. Pro Arduino se toto prostředí nazývá Arduino IDE. Je volně ke stažení na oficiálních stránkách.

    Nainstalujte prostředí a spusťte jej. V okně, které se objeví, uvidíte: většina místa je věnována textovému editoru. Do něj je zapsán kód. Kód ve světě Arduina se také nazývá skica.

    Napišme tedy skicu, která nic nedělá. Tedy minimum možného správný program v C++, což jen pálí čas.

    void setup() ( ) void loop() ( )

    Významu psaného kódu se zatím věnovat nebudeme. Pojďme to zkompilovat. Chcete-li to provést, v IDE Arduino je na panelu nástrojů tlačítko "Ověřit". Klikněte na něj a za několik sekund bude binární soubor připraven. Toto bude oznámeno nápisem "Done compiling" pod textovým editorem.

    Výsledkem je binární soubor s příponou .hex, který může mikrokontrolér spustit.

    Nyní jej musíte vložit do Arduina. Tento proces se nazývá bootování, flashování nebo flashování. Chcete-li provést nahrání v IDE Arduino, na panelu nástrojů je tlačítko "Nahrát". Připojte Arduino k počítači pomocí USB kabelu, klikněte na "Upload" a za pár okamžiků se program nahraje do Arduina. V tomto případě bude program, který tam byl předtím, vymazán.

    O úspěšný firmware oznámí nápis "Done Uploading".

    Pokud při pokusu o stažení narazíte na chybu, ujistěte se, že:

      V menu Tools → Board se vybere port, ke kterému je Arduino skutečně připojeno. Můžete připojit a odpojit USB kabel, abyste viděli, který port se objeví a zmizí: toto je Arduino.

      jste nainstalovali potřebné ovladače pro Arduino. To je vyžadováno pro Windows, není vyžadováno pro Linux a je vyžadováno pouze pro starší desky před Arduino Duemilanove na MacOS.

    Gratulujeme! Odešel jsi celou cestu od čistý břidlice na běžící program v Arduinu. Ať nic nedělá, ale tohle už je úspěch.