Převzato z článku:
https://www.root.cz/clanky/arduino-jak-pro-nej-zacit-programovat/
Wiring
Programovací jazyk, v němž můžete pro Arduino psát, se jmenuje Wiring (lépe řečeno „vychází z jazyka Wiring“, ale rozdíly jsou minimální). Podle autorů jde o „jazyk podobný C++“ – ve skutečnosti je to jakýsi metajazyk či „vylepšená sada maker“ nad C++. Wiring původně vznikl pro vývojový kit podobný Arduinu a vychází z dalšího open source projektu, který se jmenuje Processing (můžete si všimnout určité podobnosti v logu Arduina a Processingu).
Návrh sledoval maximální jednoduchost a srozumitelnost pro programátora, co s jednočipy začíná: Syntakticky lze použít všechny návyky, co máme z C-like jazyků. Všechny ty složené závorky, středníky, definice funkcí a proměnných, poznámky, bloky i řídicí konstrukce budou povědomé každému, kdo kdy prošel kolem C (viz základy jazyka Wiring). Přitom není potřeba zabývat se vší tou objektovou veteší – z objektové syntaxe zůstává v podstatě jediný operátor „.“ (tečka).
Pokud budeme pro Arduino vytvářet knihovny (a to budeme v některém z dalších dílů), sestoupíme i o úroveň níž, k C++, ale zatím si vystačíme s Wiring.
Předpokládám, že čtenáři seriálu znají C, a že tedy není potřeba popisovat základy jazyka. Ostatně to hlavní uvidíme např. při pohledu do cheat sheetu (uložte si, bude se hodit) a odlišnosti si vysvětlíme, když na ně narazíme. prozatím nám stačí vědět, že můžeme psát „céčkové programy“.
Hello World!
Každý správný programátorský manuál začíná příkladem „Hello World“, tedy něčím, co ukáže, že to všechno funguje. Přidržíme se tohoto modelu a napíšeme si jednoduchý program, na kterém si ověříme, že vše funguje tak jak má. Ekvivalentem „Hello World“ v elektronice je blikání LEDkou, budeme tedy blikat i my. Ale nejdřív ještě krátký pohled na hardware, abychom věděli, s čím máme vlastně blikat.
Blikáme!
Program v C má vždy hlavní funkci, nazvanou main(), která je volána při spuštění programu. U Arduina máme takové funkce dvě a nazývají se setup()
a loop()
– toto rozvržení vychází z nejčastější kostry programů pro jednočipy, kde po RESETu proběhne nějaká inicializace a pak se dokola provádí v nekonečné smyčce nějaká akce, až do vypnutí napájení. Zkušení návrháři používají postupy, kdy se ona „nekonečná smyčka“ nahrazuje kombinací obslužných rutin, vyvolaných na základě nějaké akce (přerušení) a uspávání jednočipu do stavu s nízkým odběrem. U Arduina, které slouží především pro experimenty a seznámení s elektronikou, je vše zjednodušeno do výše zmíněné podoby. Lze si to představit zhruba takto:
1
2
3
4
5
6
7
8
|
void main() { setup(); while (1) { loop(); } } |
Ve funki setup si tedy nastavíme digitální port 13 jako výstupní, a ve smyčce (loop) uděláme to nejjednodušší, co udělat můžeme: Rozsvítíme LED (=pošleme na výstup logickou 1), počkáme, zhasneme LED a zase počkáme. A protože je loop() voláno stále dokola, bude i Arduino stále blikat.
Program („skeč“) může vypadat třeba takto:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#define LED 13 // číslo pinu, kde je připojena LED void setup() { // nastavíme pin jako výstupní pinMode(LED, OUTPUT); } void loop() { digitalWrite(LED, HIGH); // rozsvítíme LED delay(1000); // počkáme digitalWrite(LED, LOW); // zhasneme LED delay(300); // ... a zase počkáme } |
Kód je velmi jednoduchý – definujeme si číslo pinu s LED. Ve funkci setup() zavoláme funkci pinMode, která nastaví pin jako výstupní. A konečně ve funkci loop() děláme to, co jsme si popsali výše – nastavíme pin na log. 1 nebo log. 0 (HIGH / LOW) pomocí systémové funkce digitalWrite a čekáme (delay).
Zkusíme si kód přeložit a ověřit, že jsme se neupsali – klikneme proto na Verify:
IDE bude chtít skeč uložit – uložte ho třeba pod názvem Blink. Pokud jsme vše napsali dobře, vypíše se ve spodním okně něco jako Binary sketch size: 934 bytes (of a 30720 byte maximum)
. Tedy že skeč přeložený do binární podoby zabírá 934 bajtů.
Pokud máme přeloženo, připojené Arduino, nastavený správný model a port v IDE, tak můžeme se zatajeným dechem kliknout na Upload:
IDE přeloží skeč, nahraje ho do Arduina, počká pár sekund a pošle signál RESET. A nám to…