Po minulém díle již máme Arduino plně připojené k PC a je plně funkční. Nyní se tedy podíváme na to, jak vytvořit úplně první program, který na našem Arduinu budeme spouštět.
První a naprosto jednoduchý kód vypadá takto:
void setup() {
}
void loop() {
}
Pokud vás nyní napadlo, že tento kód vlastně vůbec nic nedělá, máte pravdu. Nedělá, nicméně jde o to, že je to úplný základ, bez kterého jakákoliv aplikace na Arduinu končí chybou. Proto si jej trochu rozvedeme.
První část funkce setup() se stará o to, co se má provést při prvním spuštění. Je to tedy přesně to, co se provede, když do Arduina nahrajeme kód. Je to to, co se provede, když Arduino připojíte k napájení a je jedno jestli přes USB nebo přes napájecí konektor. Také je to to, co se provede, když Arduino restartujete tlačítkem reset. Prostě se jedná o něco, co je spuštěno pouze jednou a vždy na začátku všeho. Kdyby jakékoliv připojení napájení či restartování nebo nahrání kódu byl počátek, tak tento kus kódu se provede na počátku všeho.
Za touto funkcí následuje další funkce s názvem loop(). Tato funkce se bude provádět do doby, dokud bude Arduino připojeno k napájení. Jde o cyklus, který je vykonáván po celou dobu života kódu – život kódu je doba, od nahrání kódu po přehrání nebo od připojení napájení do odpojení. Také to mohou být ale různé kombinace, jako například od připojení napájení do přehrání atd… Tímto jsem chtěl jen demonstrovat, co to přesně znamená, prostě co je ve funkci loop(), to se bude provádět do nekonečna.
První o co se tedy pokusíme, bude rozblikání diody. Nepůjde o nic složitého než jen o to, že se pokusíme na vteřinu rozsvítit diodu a na vteřinu ji vypnout. To vše neustále dokola.
Vzhledem k tomu, že jsem na začátku dílu nenapsal, že je zapotřebí bastl deska, dioda a propojující drátky, tak vás uklidním, není to zapotřebí. V pátém dílu jsme se totiž docela podrobně seznámili s deskou UNO.
Když se na díl podíváte, tak zjistíte, že u jedné z diod jsem zmínil, že je připojena k pinu 13, jedná se o diodu s označením L. To ale také znamená, že když zapíšeme jakýkoliv kód, který bude cokoliv dělat na pinu 13, že to tato dioda bude signalizovat.
Pojďme si tedy představit naprosto základní a jednoduchý kód, který tuto diodu donutí k tomu, aby se na vteřinu rozsvítila a na vteřinu zhasla.
void setup(){
pinMode(13,OUTPUT);
}
Toto je základní kód, je to jedna polovina z kódu, který musí každé Arduino mít viz několik odstavců výše. Tímto kódem říkáme, že pin číslo 13 bude použit jako výstup. Neděláme tím nic převratného a také výsledný kód není zrovna dlouhý.
Nyní bude následovat funkce loop(), která tento pin bude zapínat a vypínat. Kód je následující:
void loop() {
digitalWrite(13,HIGH);
delay(1000);
digitalWrite(13,LOW);
delay(1000);
}
Tímto kódem říkáme, že se má zapnout pin číslo 13. Poté se má čekat jednu vteřinu a pak se pin číslo 13 má vypnout a zase se čekat jednu vteřinu. Takto pořád dokola, resp. do odpojení napájení, restartování či přehrání kódu něčím jiným.
Rozebereme si nyní funkci digitalWrite. Funkce digitalWrite má dva parametry. Tím prvním je pin, který se bude ovládat a tím druhým je stav, ve kterém se pin nachází. Tento stav může být buď HIGH nebo LOW ale jen v případě, že je funkcí pinMode nastaven jako OUTPUT – viz první část kódu.
- HIGH znamená nastavení napájení na 5V (popř 3,3 na deskách co mají 3,3V, což není případ UNA)
- LOW znamená nastavení 0V (zem)
Tímto je tedy rozebrána funkce digitalWrite a nyní se pojďme podívat na funkci delay(). Funkce delay má pouze jeden jediný parametr, kterým je číslo, které označuje dobu v milisekundách. To znamená, že pokud chceme, aby mezi jednotlivými procesy byl čas jednu vteřinu, zapíšeme 1000, protože jedna vteřina má právě tisíc milisekund.
Pokud tímto postupem budeme chtít zapsat jednu minutu, zapíšeme 60000, protože 60vteřin= 1000ms*60=60000ms. Tímto počítáním se můžeme dostat třeba i na dny, tedy jeden den je 24*60*60*1000 (hodiny*minuty*vteřiny*milisekundy). Tedy výsledná hodnota je 86400000. To si ale jistě dovede každý sám dopočítat, nicméně je vhodné místo čísla dosazovat proměnou, kterou budete dopočítávat.
Tedy deklarujete proměnou s názvem třeba doba a přiřadíte jí tuto hodnotu, která bude rozepsána:
int doba = 24*60*60*1000;
Nyní tuto hodnotu vložíme do funkce delay
delay(doba);
Takto jednoduše bude doba, jak dlouho se má čekat vložena do funkce. Tento zápis je daleko lepší, protože je na první pohled vidět, jak dlouho se bude čekat, na rozdíl od čísla, které budete muset pořád dopočítávat. Navíc, pokud se rozhodnete, že je doba příliš dlouhá a je zapotřebí ji zkrátit, dá se to udělat hned a nemusíte nic počítat, tedy pro následnou úpravu je tento kód o dost lepší.
Takto vypadá rozsvícená dioda L u pinu 3, když na Arduino pustíme předchozí kód, který jï měl na vteřinu rozsvítit a na vteřinu zhasnout.