
ARDUINO - programujeme mikrokontroléry /3.časť
Späť na úvod >> Späť na programovanie >> Späť na seriál
V predchádzajúcej časti sme ukázali, ako nainštalovať vývojové prostredie (IDE) Arduina. Zároveň sme si nainštalovali správny ovládač pre príslušný kit Arduina (v našom prípade Arduino Uno) a nakonfigurovali prostredie IDE na spoluprácu s ním. Len na zopakovanie – IDE si pamätá posledné použité nastavenie, ak teda budeme chcieť pracovať s iným kitom, musíme zmeniť príslušné nastavenia. Nastal čas na naozajstnú prácu s Arduinom. Tentoraz opíšeme kit Arduina Uno a vytvoríme si náš prvý program, naučíme sa ho skompilovať a nahrať do kitu Arduina.
Opis Arduina Uno
Na obrázku č. 1 je kit Arduina Uno. Jeho najdôležitejšie časti sú označené číslami. Tu je vysvetlenie jednotlivých častí:
- Resetovacie tlačidlo – použijeme ho, ak z určitého dôvodu chceme nahraný program spustiť znova od začiatku (pri niektorých klonoch Una môže byť resetovacie tlačidlo umiestnené inde na doske kitu)
- Konektor USB typu B – používame na spojenie Arduina Uno s počítačom na nahrávanie programu do kitu, na sledovanie výsledkov alebo na komunikáciu kitu s počítačom
- Napájací konektor – používa sa na napájanie kitu, ak ten nie je napájaný cez konektor USB; dovolené napätie je od 7 do 12 voltov
- Prevodník USB – serial – zabezpečuje komunikáciu mikrokontroléra s počítačom cez konektor USB
- Konektor ICSP na programovanie prevodníka USB – serial; tento konektor nebudeme bežne používať
- Indikačná LED dióda označená L je pripojená na výstup č. 13, takže nepotrebujeme ku kitu pripájať externú LED diódu; na nej si ukážeme naše prvé programy
- Indikačné diódy TX a RX – slúžia na indikáciu sériového prenosu medzi kitom a počítačom
- Indikačná dióda ON – signalizuje pripojené napájacie napätie kitu (niekde označovaná aj PWR)
- Mikrokontrolér Atmel – srdce kitu Arduino
- Konektor ICSP na programovanie mikrokontroléra Atmel; využívajú ho niektoré shieldy
- Lišta s výstupmi napätí kitu
- Analógové vstupy – tu budeme pripájať analógové súčiastky. Dajú sa využiť aj ako digitálne vstupy a výstupy
- Digitálne vstupy a výstupy – tu budeme pripájať rôzne obvody; piny označené vlnovkou možno použiť ako moduláciu PWM, čo si ukážeme neskôr
Sketch
Arduino sa dá programovať v jazyku C alebo C++. Vývojové prostredie Adruina obsahuje kompilátory pre oba tieto jazyky. No na ľahšie osvojenie programovania a efektívnejšiu prácu pre amatéra (domáceho majstra) je vhodnejšie používať knižnicu Wiring, priamo šitú pre Arduino, ktorá je v poslednom čase veľmi rozšírená a ktorá sa označuje ako samostatný programovací jazyk, podobný jazykom C a C++. Touto cestou pôjdeme aj my a až po zvládnutí Wiringu si ukážeme, ako programovať v C.
Otvorme si teda prostredie IDE (obr. č. 2). Všimnime si, že titulok okna aj záložka nového listu majú v názve slovo sketch a aktuálny dátum. Slovo sketch (čítaj skeč) znamená skica alebo náčrt (skeč) a takto sa v Arduine, presnejšie vo Wiringu, označuje zdrojový text programu.
Náš prvý program
Vývojové prostredie IDE obsahuje množstvo vzorových príkladov a knižníc (čo sú knižnice a ako sa s nimi narába, to si vysvetlíme neskôr). Prejdime teraz do položky menu File – Examples – 01.Basics (obr. č. 3).
A otvorme príklad s názvom Blink (obr. č. 4).
Zdrojový text tohto programu je na výpise č. 1.
/*
Blink
Turns on an LED on for one second, then off for one second, repeatedly.
This example code is in the public domain.
*/
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;
// the setup routine runs once when you press reset:
void setup() {
// initialize the digital pin as an output.
pinMode(led, OUTPUT);
}
// the loop routine runs over and over again forever:
void loop() {
digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
|
Medzi znakmi /* a */ sa nachádzajú viacriadkové komentáre. Tie slúžia na opis programu a pri kompilácii sa neakceptujú ( teoreticky by sme ich mohli vymazať a nič by sa nestalo; komentáre v programovaní však majú svoj význam – sami zistíme, že si nebudeme pamätať, ako sme určitý problém vyriešili pred pol rokom, ale komentár nám to znova objasní). Podobne aj jednoriadkové komentáre, ktoré sa začínajú znakmi // na začiatku riadka. Jednoriadkové komentáre sa používajú na opis funkcie alebo príkazu.
Všetko ostatné mimo komentárov je zdrojový text programu (skeče). Ten má svoju štruktúru a delí sa na niekoľko dôležitých častí:
- Definičná časť
- Blok setup
- Blok loop
V definičnej časti sa definujú konštanty a premenné, ktoré chceme v programe používať. V tomto prípade text
int led = 13;
znamená, že sme definovali premennú s názvom led, ktorá je typu integer (odtiaľ skratka int), čo sú celé čísla v rozsahu -32768 až 32767, a hneď sme premennej led priradili hodnotu 13. Zapamätáme si, že za každým príkazom nasleduje znak bodkočiarky ;.
Nasleduje blok s názvom void setup(). Ten je uzavretý do zložených zátvoriek { a }. V týchto zložených zátvorkách sa nachádzajú príkazy, ktorými v programe nastavujeme rôzne hodnoty, jednotlivé vývody kitu a podobne. Tento blok sa po spustení programu vykoná iba raz, a to na jeho začiatku. V našom prípade máme v tomto bloku príkaz
pinMode(led, OUTPUT);
Tento príkaz nastaví pin s názvom led ako výstupný (OUTPUT). A keďže my už vieme, že slovo led má hodnotu 13, môžeme povedať, že tento príkaz nastaví pin č. 13 na kite Arduino Uno ako výstup. A z prvého obrázka a opisu šiestej položky vieme, že na pin č. 13 je pripojená LED dióda, ktorá je integrálnou súčasťou kitu (označená ako L).
Nasleduje blok void loop(). Aj tento blok je uzavretý v zložených zátvorkách { a }, medzi ktoré sa píšu príkazy jazyka Wiring. Ako názov bloku loop predznačuje, ide o slučku (angl. loop = slučka). Príkazy v tejto slučke sa vykonávajú stále dookola až do vypnutia napájania kitu.
Ako prvý príkaz v tejto slučke je
digitalWrite(led, HIGH);
ktorý znamená, že na digitálny výstup led (teda pin č. 13) sa zapíše logická jednotka (HIGH). Keďže logická jednotka značí napätie okolo 5 voltov, pripojená LED dióda sa rozsvieti.
Druhý príkaz
značí, že mikrokontrolér si dá prestávku (delay) 1000 milisekúnd, čo je presne jedna sekunda.
Tretí príkaz
digitalWrite(led, LOW);
je veľmi podobný tomu prvému, ibaže na digitálny výstup led (pin č. 13) sa zapíše logická nula (LOW). A keďže logická nula je skoro nulové napätie, pripojená LED dióda zhasne.
Štvrtý príkaz
je identický s druhým, takže mikrokontrolér čaká jednu sekundu.
Nasleduje koniec slučky loop, takže táto slučka začne znovu od začiatku prvým príkazom. Uvedený opis môžeme stručne interpretovať takto:
Na pine č. 13 rozsvieť LED-ku, čakaj sekundu, zhasni LED-ku, čakaj sekundu a opakuj dookola.
Preklad a nahratie do kitu
Teraz pripojme kit Arduino Uno pomocou kábla USB k počítaču. Kliknime na druhú ikonku zľava v podobe šípky. Spustí sa kompilácia (preklad) programu, čo môžeme sledovať v spodnom čiernom okne. Keď sa objaví takýto (alebo podobný) text: „Binary sketch size: 1 082 bytes (of a 32 256 byte maximum)“, značí, že preklad sa uskutočnil v poriadku a po hlásení „Uploading“ počítač nahrá preložený kód do kitu Arduina. To spozorujeme tak, že na kite budú blikať diódy TX a RX (položka č. 7 na obrázku č. 1) a úspešné nahranie je ukončené hlásením „Done uploading“.
Ak všetko prebehlo bez chýb, môžeme prostredie IDE Arduina vypnúť. Odteraz vždy, keď pripojíme napájanie k Arduinu, či už cez konektor USB, alebo napájací konektor, začne LED dióda na kite blikať v sekundových intervaloch.
Ako domácu úlohu si vyskúšajte pomeniť hodnoty v príkaze delay a sledujte, ako sa mení blikanie LED diódy.
Zobrazit Galériu