2. diel - Arduino - Hello World
V minulom dieli sme si predstavili Arduino a dnes si už naprogramujeme prvý program. Než ale začneme programovať, popíšeme si, ako je to s nahrávaním programov u jednotlivých modelov.
Väčšina dosiek má USB port s prevodníkom na sériový (u starších dosiek bol normálny sériový), ktorý sa dá u niektorých dosiek preprogramovať, teda ho počítač nevidí ako Arduino na sériovom porte, ale napríklad ako myš či klávesnicu. Teda si pomocou Arduino možno vytvoriť aj vlastný herný ovládač či iné vstupné zariadenie (možno sa o tom niekedy spomeniem). U niektorých dosiek ale na prevodník nezostalo miesto (Lilypad), teda je k nim nutné pre nahranie programu pripojiť doštičku s prevodníkom.
Arduino Lilypad s prevodníkom
Pripojenie k počítaču prebehne bez problému, Windows si ho načíta. Na programovanie nám postačí Arduino IDE, zadarmo na stiahnutie na stránkach Arduino ( http://arduino.cc/...ain/Software#toc2). Po jeho spustení si rozkliknite menu Tool> Board a vyberieme naše Arduino. Ja budem používať MEGA 2560. Ďalej si v menu Tools ešte rozkliknite položku Serial Port, kde vyberieme port, na ktorom je Arduino (ak neviete, otvorte správcu zariadení a rozkliknite sériové porty, kde by malo byť u niektorého napísané Arduino a váš model).
Arduino na porte COM6 .<>
Arduino IDE
Teraz k samotnému programovania. Po spustení uvidíme hore pod meny tmavo modrou lištu s 6 tlačidlami. Prvý nám overí zdrojový kód na chyby, druhé ho overí a nahrá do Arduino. Potom sú tu tlačidlá nový, otvoriť, uložiť a úplne vpravo potom otvorenie monitora sériovej linky, kde si môžeme zobraziť údaje, ktorá po Arduino odosielame cez sériovú linku (napríklad do počítača). Pod touto lištou je už pás kariet, v ktorom môžeme prepínať medzi ďalšími súbormi aktuálneho programu. My sa ale väčšinou vojdeme do jedného, viac ich použijeme len zriedka. Názov karty i celého projektu bude odvodený od dnešného dátumu. Za ním bude potom ešte písmenko abecedy, označujúce poradie návrhu (Sketche) daného dňa. Trebárs druhý sketch z 5. júla sa bude volať sketch_jul05b. Toto sa dá zmeniť, pri uložení budete môcť zadať svoj názov. Arduino IDE nám pre každý projekt vytvorí novú zložku (umiestnené budú v C: \ Users \ uzivatel \ Documents \ Arduino), pretože počíta, že budeme používať viac súborov.
Nižšie je biely priestor, kam budeme písať svoj kód. Jazyk je odvodený s Wiring, používa štandardný syntax, teda by ste s ním nemali mať problém. Potom je tu ktorej len čierne okno, kam sa vypisuje ako dopadla kompilácie či upload do Arduino, veľkosti Sketche a koľko zostalo na Arduino a tiež nájdené chyby.
Predstavenie dosky
Než sa ale do čohokoľvek pustíme, musíme vedieť s čím pracujeme.
- USB budeme pripájať do jediného portu (1). Pozor: u dosky MEGA 2560 nie je kábel súčasťou balenia (myslím, že je len u UNA).
- Ďalším konektorom je napájací jack (2), schopný pobrať od 6V do 20 V, ale odporúča sa medzi 7 a 12 V. Cez 12 V môže dôjsť k prehriatiu, pod 7 zase nemusí byť všetko stabilný.
- Ďalej sa tu nachádza resetovacie tlačidlo (3). To program spustí znova a vymaže hodnoty v premenných (asi ako keď resetujete normálny počítač).
- Uprostred doske dominuje jej hlavná časť - Mikroprocesor ATmega 2560 (4). Ten tu podrobne popisovať nebudem, ale bez neho to nejde.
- Číslom 5 je označená LED dióda L, ktorá sa napojená na pin 13. Pod ňou sú diódy TX a RX, indikujúca komunikáciu na sériovej linke. Na doske sa nachádza ešte jedna dióda - napájanie. Na rozdiel od týchto žltých svieti zelene a je umiestnená nad tlačidlom reset.
- Vedľa procesora je ICSP konektor (6), ktorým je možné tiež pristupovať k procesoru, avšak sú tu možné pokročilejšie úpravy.
- Ďalej je tu ešte jeden podobný konektor (7). Ten sa nachádza len na modeloch MEGA a ponúka nám možnosť preprogramovať prevodník sériového portu, aby sa tváril ako napríklad myš. Potom už nám ostávajú len piny.
- Líštička s číslom 8 je napájanie. Sprava obsahuje piny, Vin pre vstupné napätie nahrádza jack konektor. Potom sú tu dva GND, kam budeme pripájať zem. Potom sú tu 5V a 3.3V, oba výstupné. Potom už nás z tejto časti zaujíma len pin reset, ktorý plní rovnakú funkciu resetovacieho tlačidla.
- Lišta 9 obsahuje analógové piny, ktoré slúžia ako vstupné a vracia hodnotu medzi 0-1023. Ak pripojíme potenciometer, tak sa bude hodnota meniť, ako s ním budeme otáčať.
- 10 sú základné piny 2-13 a ďalšie GND. Schválne tu nezahŕňajú piny 0 a 1, ktoré síce môžu byť použité tiež, ale je na nich sériová linka, takže pri každom ich použití musíme príslušenstva odpojiť.
- Dosky MEGA majú navyše niekoľko ďalších sériových liniek (11), ktoré sa hodia napríklad na komunikáciu s Bluetooth alebo inými dosky.
- MEGA sú tiež rozšírené o ďalšie lištičky pinov (12), kde ich je až do 53 (nadväzujú na predchádzajúce lištičky 10 a 11) a obsahuje ďalšie dva GND. Pinov je tu viac, len je teraz nebudeme potrebovať a predstavíme si ich, až na ne príde rad.
A tiež pozor na to, čo pripájame. Každý pin je schopný záťaže len do 20mA, chvíľkovú až 40mA. Pri prekročení v lepšom prípade zlikvidujeme pin, v horšom celú dosku. Preto sa pri náročnejších obvodoch používajú tranzistory, ale to až niekedy nabudúce.
Hello world
Arduino vie posielať dáta po sériovej linke. Takže si od neho necháme vypísať Hello world a čas od spustenia.
Ja by som najprv napísal kód a potom ho postupne vysvetlil. Rád by som v komentároch videl, ako vám to bude vyhovovať a podľa toho by som potom písal ďalšie. Teraz program - ten sa skladá aspoň z funkcií setup () a loop (). Setup sa vykoná raz pri nabehnutí Arduino a po ňom sa v slučke opakuje loop.
void setup() { Serial.begin(9600); } void loop() { Serial.println("Hello world!"); Serial.print("Funguji jiz: "); Serial.print(millis()); Serial.println("milisekund."); delay(1500); }
A k vysvetľovanie ...
Serial.begin(9600);
Toto nám otvorí sériový port s baudrate 9600, ktorý sa používa najčastejšie. Sú možné aj iné, ale odporúčam tento. Serial je v Arduino prednastavený názov pre TX a RX na pinoch 1 a 0, ktoré sú napojené na USB. Ak budete chcieť využívať aj ďalšie, tak existuje funkcie softwareserial, o ktorej si povieme inokedy a umožňuje vytvoriť TX a RX aj na pinoch, ktoré k tomu nie sú primárne určené (napríklad 12 a 11), ale tie nie sú pripojené k USB a hodí sa napríklad na komunikáciu cez BT.
Serial.println("Hello world!");
Pošle odchádzajúcu komunikáciu (TX). Jedná sa o ukončený riadok, takže ďalší text bude na novom riadku.
Serial.print("Funguji jiz: ");
Zas pošle text na sériový port, ale neukončí riadok, teda bude ďalší text na rovnakom riadku.
Serial.print(millis());
Okrem textu môžeme vypísať aj premenné či funkcie (kedy sa pošle
hodnota, ktorú funkcia vracia). Ja tu nechal vypísať funkciu
milis()
, ktorá vracia počet milisekúnd od spustenia programu.
Toto číslo bude stále väčšie a väčšie, až niekedy 50. dňa bude mimo
použiteľné hodnoty. V tomto bode program nespadne s chybou, ale hodnota sa
vynuluje (teda podľa teórie, ak to niekto chcete skúsiť, tak si rád
počkám na výsledky
)
Serial.println("milisekund.");
Teraz len napíšeme milisekúnd a dokončíme riadok.
delay(1500);
Táto funkcia program na chvíľu pozastaví, ale počítanie milisekúnd od spustenia bude pokračovať. Nie je nutná, ale je lepšie, aby nedochádzalo k masívnemu posielanie dát.
Tak, Arduino nám niečo vypisuje, to je síce pekné, ale nikde nevidíme čo. V Arduino IDE sa na lište nachádza úplne vpravo ikonka lupy. Po kliknutí na nej sa ukáže okienko - Serialmonitor. Výsledok potom bude vyzerať približne takto:
Ak sa vám nezobrazuje nič, alebo nejaké nezmyselné znaky, skontrolujte, či máte rovnaký baudrate (číslo u Serial.begin (); a rozbaľovacie ponuka baud v Serialmonitoru).
Toto je pre dnešné diel všetko, nabudúce zablikajú s diódou a zameriame sa na analógové vstupy / výstupy. Do budúcnosti mám potom v pláne (ale nezaručuje rovnaké poradie) kódový zámok, LCD display, alarm, hodinový modul, komunikáciu cez BT, príjem IR signálu z ovládača pre TV, SD kartu, pohrať sa so zvukom, ovládať svetla cez internet, merať vzdialenosť a mnoho ďalšieho.