Lekce 2 - První program

15.12.2012 16:41

 

V předchozím díle jsme nainstalovali ovladače pro Arduino a připojili ho k počítači. Zkompilovali jsme také náš první program, který však neobsahoval žadné příkazy, takže naše Arduinko nedělalo zatím nic. 

V dnešní lekci si pro začátek, aby jsme nemuseli přidavat prozatím nějaké externé součástky, rozblikáme LED diodu. Tato je již na desce integrována a připojena na digitální pin č.13.(viz obrázek - v červeném kolečku)

 

A nyní k vlastnímu psaní programu. Již minule jsem si nastínili, že k běhu programu jsou potřeba funkce setup() a loop(). Program na svém začátku nejprve vykoná všechny příkazy ve funkci setup() a to jako nastavení jednotlivých pinu, inicializace displeje apod. a násladně ve smyčce vykovává přikazi ve funkci loop().

Tyto funkce již máme z minulé lekce v okně programu naspané a nyní si vysvětlíme další funkce, které budou potřeba k našemu programu a to rozblikání diody.

kód programu

int led = 13;                     //deklarujeme proměnou "led" a dosadíme do ní číslo 13  

 

 
 
void setup() {                   // tento blok se provede pouze jednou            
   pinMode(led, OUTPUT);              // tímto sdělujeme procesoru že digitální pin "led"
                                        // (v našem připadě 13) bude výstup   
}
 
 
void loop() {                    // tento blok se bude provádět stále dokola
  digitalWrite(led, HIGH);  // zapíše na pin "led" (pin 13) vysokou hodnotu (zapne)
  delay(1000);                 // čeká 1000 milisekund (1 sekunda)
  digitalWrite(led, LOW); // zapíše na pin "led" (pin 13) nízkou hodnotu (vypne)
  delay(1000);                // čeká 1000 milisekund (1 sekunda)
}

 

Asi jste si na první pohled všimli, že si můžete k programu pro větší přehlednost přidávat komentáře za dvojté lomítko. Programový kompiler si potom textu nevšímá. Komentář můžete také dát do bloku mezi sekvenci znaku "/*" a "*/".

 

příklad:
/* komentář .....
stále komentář....
..
..
..
konec komentáře */
 
Z programu, který jsme teď napsali, může vyčíst nějaké nové veci. Již na prvním řádku vidíme "int led = 13;" Tím jsme stanovili, že proměná "led" bude typu integer a může dostahovat hodnot o-32,768 to 32,767 a dosadili jsme do ní číslo 13 a to z toho důvodu, že naší led diodu v Arduinu máme připojenou na digitální pin číslo 13. Tato deklarace však není pro nás povinná, Dále, jak v programu vidíte je proměná použitá pouze 3x a místo led by jsme mohli napsat čislici 13 a program by fungoval stejně správně. Toto se dělá z důvodu pozdější snadné změny hodnoty pro celý program změnou jednotlivé proměné. V případě, že by jsme měli program dlouhý 1000 řádků, trvalo by asi dlouho než by jsme našli všechny příkazy týkající se led diody a tyto všechny měnili. 
 
 
pinMode(pin, INPUT/OUTPUT)
Jako další si vysvětlíme řádek pinMode(led, OUTPUT); v bloku setup(). Tento nám říká že na digitálním pinu led (deklarovám jako pin 13) bude výstup. V případě, že by jsme chtěli tento pin nastavit jako vstupní(např. připojení tlačítka), místo OUTPUT by jsme analogicky použili INPUT. Příklad pinMode(5, HIGH); - na digitálním pinu 5 nastavíme vysokou hodnotu.
 
digitalWrite(pin, HIGH, LOW)
Tento příkaz určí na vybraném pinu zda bude mít logickou 1 (HIGH) nebo logickou nulu 0 (LOW). Pro vysvětlení buď se nám na určeném výstupu objeví napětí či nikoliv.
 
delay(milisekund)
Príkaz delay() určuje na jakou dobu v milisekundách se běh programu zastaví. V našem případě delay(1000) se jedná o 1000 ms (1 sekunda).
 
 
Pokud jste vše správně napsali, program udešlete do Arduina připojeného k USB. Led dioda by se měla rozblikat jako ve videu zde.
 
 

 

 

 

 

Zpět

Diskusní téma: Lekce 2 - První program

Datum
Vložil
Titulek

sloučení 2 programů

Mám dva funkční (krátké) programy .ino pro Arduino MEGA a potřebuji je sloučit do 1 programu, což se mi nedaří. Snažil jsem se, zatím bezvýsledně, najít nějaký postup (polopatický s ohledem k mému věku a mým znalostem). Prosím, poradíte mi někdo? Děkuji.

Datum
Vložil
Titulek

Perfektní

Velmi hezké a přehledné stránky , to už se dneska jen tak nevidí.

Datum
Vložil
Titulek

problém

Ahoj po nahrání mi to napíše toto
avrdude: stk500_getsync(): not in sync: resp=0x00
co s tím

Datum
Vložil
Titulek

Re: problém

pokud ti to píše na ARDUINO MINI PRO tak je to problem s resetem

Datum
Vložil
Titulek

Nefunguje mi to

Někde je chyba a nevím kde. Zřejmě někde v nastavení nebo kde. Není problém opsat takový kód. Po kompilaci mi to hlásí:
sketch_feb02a.ino: In function 'void loop()':
sketch_feb02a:8: error: 'led' was not declared in this scope
sketch_feb02a:9: error: 'deLay' was not declared in this scope

Datum
Vložil
Titulek

Re: Nefunguje mi to

Původně jsem instalaci z Arduina.CC jako instalator. Teď jsem si stáhl zip. chybu s led to nehlásí a u delay byl problém stím, že jsem napsal deLay a ne delay. V programu je deLay, ale mě to chodí pouze s delay...zvláštní

Datum
Vložil
Titulek

Re: Re: Nefunguje mi to

Ono to vypadá jako velké "L", ale ve skutečnosti se jedná o malé "l". Font použitý na stránkách mate... ;)

Datum
Vložil
Titulek

Re: Nefunguje mi to

Arduino se programuje v C a C je case sensitive což znamena že delay != deLay. Dále pak bych řekl že je špatně to int led = 13; podle me by tam melo byt const int led = 13;

Datum
Vložil
Titulek

Re: Re: Nefunguje mi to

Není to přímo C, ale Arduino Language, což je jazyk odvozený z Wiringu. C-čku se ale každopádně dost podobá.

Datum
Vložil
Titulek

Re: Re: Re: Nefunguje mi to

Wiring je framework - cili v podstate chytre sestavena sada knihoven. Arduino se programuje v Ccku a vyuziva takoveto knihovny, proto prvni programy vypadaji "skoro jako jiny jazyk" protoze to jsou pouze volani funkci. Ale prekladat se to da cistym prekladacem Ccka (pro avr, pochopitelne, ne pro x86) a taky to tak bezne delam.

Vyhledávání

arduino8.cz © 2015 Všechna práva vyhrazena.