Obsah I
Sezn´ amen´ı s Arduinem
1 O Arduinu
2
2 Typy desek
3
2.1
Arduino Mini . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.2
Arduino Nano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.3
Arduino Micro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.4
LilyPad Arduino . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.5
Arduino Fio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.6
Arduino Uno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.7
Arduino Leonardo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.8
Arduino Y´ un . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.9
Arduino Mega2560 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.10 Arduino Due . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.11 Arduino Esplora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.12 Arduino Robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.13 Arduino Intel Galileo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.14 Arduino Tre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
3 Arduino Shieldy
11
4 Arduino klony
12
II
13
Programujeme Arduino
5 V´ ybˇ er a sezn´ amen´ı
15
6 Arduino IDE
17
6.1
Historie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
6.2
Staˇzen´ı a instalace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
6.3
Pouˇz´ıv´ an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
6.4
Programovac´ı jazyk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
7 Blik´ ame LED
20
7.1
Budeme potˇrebovat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
7.2
Pˇripojen´ı Arduina a PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
7.3
Zapojen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
7.4
Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
III
Z´ akladn´ı struktury jazyka Wiring
22
8 S´ eriov´ a komunikace
24
9 Promˇ enn´ e
26
9.1
Pr´ ace s promˇenn´ ymi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
9.2
Datov´e typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
10 Pole
29
10.1 Deklarace pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
10.2 Pˇr´ıstup k hodnot´ am v poli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
11 Digit´ aln´ı vstup a v´ ystup
30
11.1 Vstup nebo v´ ystup? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
11.2 Ovl´ ad´ an´ı v´ ystupu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
ˇ ı vstupu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Cten´
31
12 Pˇ r´ıklad: Tlaˇ c´ıtko a LED dioda
32
IV
34
Pokroˇ cilejˇ s´ı struktury jazyka Wiring
13 Konstanty 13.1 Logick´e konstanty
36 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
13.2 Typ digit´ aln´ıho pinu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
13.3 Proud na digit´ aln´ıch pinech . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
14 Analogov´ y vstup a v´ ystup
39
14.1 analogWrite() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
14.2 analogRead() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
15 Pˇ r´ıklad: Regulace jasu LED
41
16 Podm´ınky
43
16.1 Porovn´ avac´ı oper´ atory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
16.2 Sloˇzen´e podm´ınky . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
16.3 if() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
16.4 else if() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
16.5 else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
16.6 Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
17 Pˇ r´ıklad: P´ as LED diod
47
V
49
S´ eriov´ a komunikace a cykly
18 S´ eriov´ a komunikace
51
18.1 Zah´ ajen´ı komunikace – Serial.begin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
18.2 Odesl´ an´ı dat – Serial.print() a Serial.println() . . . . . . . . . . . . . . . . . . . . . . . . .
52
ˇ ı dat – Serial.available() a Serial.read() . . . . . . . . . . . . . . . . . . . . . . . . . . 18.3 Cten´
53
18.4 Ukonˇcen´ı komunikace – Serial.end() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
19 Cykly
55
19.1 Sloˇzen´e oper´ atory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
55
19.2 Cyklus while() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
19.3 Cyklus do. . . while() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
19.4 Cyklus for() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58
20 Pˇ r´ıklad: Had z LED diod
59
VI
60
Uˇ ziteˇ cn´ e funkce
ˇ 21 Cas 21.1 delay() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62 62
21.2 delayMicroseconds() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
21.3 millis() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
21.4 micros() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
22 Matematick´ e funkce 22.1 Matematick´e oper´ atory
64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
22.3 max() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
65
22.4 abs() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
22.5 constrain() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
22.6 map() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
22.7 pow() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
22.8 sqrt() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
22.9 Goniometrick´e funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
22.9.1 sin() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
22.9.2 cos() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
22.9.3 tan() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
22.2 min()
23 N´ ahodn´ aˇ c´ısla 23.1 random() a randomSeed() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71 71
24 Pˇ r´ıklad: Hrac´ı kostka
72
VII
75
Uˇ zivatelsky definovan´ e funkce
25 Definice funkce
77
26 Vol´ an´ı funkce
78
27 Funkce, kter´ e vrac´ı hodnotu
79
28 Pˇ revody datov´ ych typ˚ u
81
28.1 char() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
28.2 byte() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
28.3 int(), long(), float() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
29 Zvuk a t´ on
82
29.1 tone() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
29.2 noTone() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
29.3 Pˇr´ıklad: Tˇr´ıt´ onov´ y bzuˇc´ ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
30 Segmentov´ e displeje
85
30.1 Sedmisegmentov´ y displej . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
30.2 V´ıcesegmentov´e displeje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
31 Pˇ r´ıklad: Klav´ır
89
VIII
91
Arduino jako kl´ avesnice a myˇ s
´ 32 Uvod
93
33 Arduino Leonardo
94
34 Mouse
95
34.1 Mouse.click() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
96
34.2 Mouse.move() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
34.3 Mouse.press(), Mouse.release() a Mouse.isPressed() . . . . . . . . . . . . . . . . . . . . . .
97
34.4 Pˇr´ıklad: Myˇs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
35 Keyboard 35.1 Keyboard.write() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
99 99
35.2 Keyboard.press(), Keyboard.release() a Keyboard.releaseAll() . . . . . . . . . . . . . . . . 100 35.3 Keyboard.print() a Keyboard.println() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 36 Arduino Esplora
102
36.1 Joystick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 36.2 Smˇerov´ a tlaˇc´ıtka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 36.3 Line´ arn´ı potenciometr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 36.4 Mikrofon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 36.5 Svˇeteln´ y senzor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 36.6 Teplomˇer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
36.7 Akcelerometr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 36.8 Piezo bzuˇc´ ak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 36.9 RGB LED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 36.10Neofici´ aln´ı pinout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
IX
Processing
108
´ 37 Uvod
110
38 Sezn´ amen´ı
111
39 Z´ aklad
112
39.1 Datov´e typy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 39.2 Pole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 39.3 V´ ypis hodnot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 40 Kreslen´ı
114
40.1 Vytvoˇren´ı kresl´ıc´ıho pl´ atna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 40.2 Barvy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 40.3 Bod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 ´ cka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 40.4 Useˇ ˇ r˚ 40.5 Ctyˇ uheln´ık . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 40.6 Zvl´ aˇstn´ı pˇr´ıpady ˇctyˇru ´heln´ık˚ u . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119 40.7 Troj´ uheln´ık . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 40.8 Elipsa a kruˇznice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 ˇ ast kruˇznice a elipsy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 40.9 C´ 41 Interakce s myˇ s´ı
125
41.1 Tlaˇc´ıtka myˇsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 41.2 Poloha kurzoru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
X
Arduino a Processsing
´ 42 Uvod
127 129
43 Firmata
130
43.1 Nastaven´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 43.2 Propojen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 43.3 Programov´ an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 44 Vlastn´ı zp˚ usob komunikace
134
44.1 S´eriov´ a komunikace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 45 Pˇ r´ıklad: Ovl´ ad´ an´ı bodu joystickem
138
46 Pˇ r´ıklad: Graf hodnot ze slideru
140
XI
Propojujeme Arduino s jin´ ymi zaˇ r´ızen´ımi
47 S´ eriov´ a linka
142 144
47.1 Propojen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 48 Bluetooth
147
48.1 Odesl´ an´ı a zpracov´ an´ı dat z potenciometru . . . . . . . . . . . . . . . . . . . . . . . . . . 148 49 Arduino a Android
149
50 Sbˇ ernice i2c
152
50.1 Funkce pro pr´ aci s i2c . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 50.2 Pˇrenos master ->slave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 50.3 Pˇrenos slave ->master . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
XII
Arduino a displeje
157
´ 51 Uvod
159
52 Maticov´ e LED displeje
160
52.1 Teorie ˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 52.2 Zapojen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 52.3 Programov´ an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 53 RGB teoreticky
165
54 Rainbowduino
166
54.1 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 54.2 Propojujeme Rainbowduina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 54.3 Zobrazen´ı obr´ azku z PC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 55 LCD displeje
177
55.1 Grafick´e monochromatick´e LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 55.2 Barevn´e grafick´e LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
XIII
Projekt: 2048
56 SD karta
191 193
56.1 Pˇr´ıprava Arduina . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 56.2 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 56.3 Pˇr´ıklad 1.: Z´ apis hodnot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 56.4 Pˇr´ıklad 2.: V´ ypis dat ze souboru . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 57 Hra 2048
198
57.1 Hodnoty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 57.2 Jdeme na to . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
XIV
Arduino a Ethernet shield
58 Ethernet Shield
210 212
58.1 Funkce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 58.2 Vytv´ aˇr´ıme server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 58.3 Sos´ ame data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 58.4 Ovl´ ad´ an´ı pˇres s´ıt’ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
XV
N´ aˇ s prvn´ı klon Arduina
223
59 Pˇ r´ıprava Arduina
225
ˇ 60 Cipy ATtiny
226
ˇ 61 Cipy ATmega
229
XVI
231
Projekt: Program´ atorsk´ a kl´ avesnice
62 Keypad
233
62.1 Zapojen´ı a programov´ an´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 63 Bezpeˇ cnostn´ı syst´ em
236
64 Program´ atorsk´ a kl´ avesnice
239
XVII
241
Projekt: Robotick´ a ruka
65 Servomotory
242
66 Robotick´ a ruka
243
XVIII
WiFi shield
251
67 Sezn´ amen´ı
252
68 Firmware shieldu
254
68.1 Zjiˇstˇen´ı verze firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 68.2 Aktualizace firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 ´ 69 Udaje potˇ rebn´ e pro pˇ ripojen´ı k WiFi
258
70 Pˇ rehled funkc´ı pro pr´ aci s WiFi
259
70.1 Tˇr´ıda WiFi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 70.2 Tˇr´ıda WiFiServer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 70.3 Tˇr´ıda WiFiClient . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 71 Pˇ r´ıklady
263
71.1 Pˇripojen´ı k s´ıti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 71.2 Interakce se serverem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
XIX
Zdroje obr´ azk˚ u
267
V pr˚ ubˇehu roku 2014 postupnˇe vznikal na serveru HW Kitchen seri´al ˇcl´ank˚ u o Arduinu. Postupnˇe byly pˇredstaveny z´ akladn´ı dovednosti potˇrebn´e pro zvl´adnut´ı pr´ace s n´ım. Seri´al se tak´e podrobnˇe vˇenoval nˇekter´ ym ze shield˚ u pro Arduino. Tato publikace obsahuje osmn´act d´ıl˚ u tohoto seri´alu. Text byl m´ırnˇe upraven pro potˇreby ebooku, ale jinak z˚ ustaly ˇcl´anky nezmˇenˇeny. Mil´ y ˇcten´ aˇri. I pˇres vˇsechnu moji snahu nen´ı vylouˇceno, ˇze se do textu vloudily chyby. Pokud na nˇekterou naraz´ıˇs, napiˇs mi pros´ım na email
[email protected].
ˇ ast I C´
Sezn´ amen´ı s Arduinem
Kdyˇz se v souˇcasn´e dobˇe zaˇc´ ateˇcn´ık pod´ıv´a na trh s v´ yvojov´ ymi platformami, m˚ uˇze ho ˇcekat nemil´e pˇrekvapen´ı. Existuje totiˇz cel´ a ˇrada v´ıce ˇci m´enˇe vhodn´ ych desek a ˇcip˚ u, kter´e v´ yrobci nab´ız´ı. Poˇc´ınaje samostatn´ ymi ˇcipy (napˇr. PICAXE), k jejichˇz programov´an´ı staˇc´ı pouze s´eriov´ y kabel a v´ ykonn´ ymi platformami s moˇznost´ı bˇehu pˇrizp˚ usoben´eho operaˇcn´ıho syst´emu konˇce. Ve svˇetˇe asi nejrozˇs´ıˇrenˇejˇs´ı platformou je Arduino. To nab´ız´ı r˚ uzn´e typy desek od m´enˇe v´ ykonn´ ych a mal´ ych model˚ u po kompletn´ı soustavy obsahuj´ıc´ı USB, HDMI, Ethernet, ˇci audio porty. V tomto ˇcl´anku si nˇekter´e z desek pˇredstav´ıme a pov´ıme si, co dovedou.
1
Kapitola 1
O Arduinu V´ yvoj prvn´ıho Arduina zapoˇcal v roce 2005, kdyˇz se lid´e z italsk´eho Interaction Design Institute ve mˇestˇe Ivrea rozhodli vytvoˇrit jednoduch´ y a levn´ y v´ yvojov´ y set pro studenty, kteˇr´ı si nechtˇeli poˇrizovat, v t´e dobˇe rozˇs´ıˇren´e a drah´e desky BASIC Stamp. Mezi studenty se Arduino uchytilo, a tak se tv˚ urci rozhodli poskytnout ho cel´emu svˇetu. (V roce 2010 vznikl zaj´ımav´ y dokument o vzniku Arduina s rozhovory s jeho tv˚ urci: Arduino The Documentary (2010) English HD.) A to nejenom prodejem vlastn´ıch desek, ale i sd´ılen´ım vˇsech sch´emat a n´ avod˚ u (jedn´a se o Open Source projekt). Programov´a ˇc´ast Arduina byla zaloˇzena na Processing, coˇz je programovac´ı jazyk s vlastn´ım editorem, urˇcen´ y k v´ yuce programov´an´ı. V dneˇsn´ı dobˇe se prodalo jiˇz nˇekolik stotis´ıc desek Arduino. D˚ ukazem, ˇze tato platforma nen´ı mrtv´a, m˚ uˇze b´ yt i to, ˇze ned´ avno byl ohl´ aˇsen v´ yvoj nov´e a v´ ykonn´e desky Arduino Galileo, kter´a vznik´a ve spolupr´ aci s Intelem. Za osm let v´ yvoje jiˇz vzniklo spoustu r˚ uzn´ ych typ˚ u Arduina. Jelikoˇz se jedn´a o opensource projekt, vznikalo spoleˇcnˇe s hlavn´ı lini´ı projektu i spoustu dalˇs´ıch, neofici´aln´ıch typ˚ u, takzvan´ ych klon˚ u. Nejdˇr´ıve si ale pˇredstav´ıme ofici´ aln´ı desky.
Obr´ azek 1.1: Ofici´aln´ı logo platformy Arduino
2
Kapitola 2
Typy desek Srdcem kaˇzd´eho Arduina je procesor od firmy Atmel, kter´ y je obklopen dalˇs´ımi elektronick´ ymi komponenty. Pro celou ˇradu desek je typick´e jednotn´e grafick´e zpracov´an´ı s pˇrevaˇzuj´ıc´ı modrou barvou. V eshopech, i na ofici´ aln´ıch str´ ank´ ach Arduina arduino.cc se m˚ uˇzeme setkat s deskami, kter´e maj´ı za sv´ ym n´ azvem jeˇstˇe pˇrid´ ano napˇr´ıklad Rev3, nebo R3. Jedn´a se o ˇc´ıslo verze dan´e desky. Mezi jednotliv´ ymi verzemi se mohlo napˇr´ıklad m´ırnˇe zmˇenit rozloˇzen´ı souˇc´astek, nebo design. Nejedn´a se vˇsak o velk´e zmˇeny, kter´e by si vyˇz´ adaly vznik dalˇs´ı desky. Na vˇetˇsinˇe desek je mimo hlavn´ıho ˇcipu jeˇstˇe pˇrevodn´ık, kter´ y umoˇzn ˇuje komunikaci mezi PC (USB) a ˇcipem. Setk´am se vˇsak s typy, kter´e pˇrevodn´ık nemaj´ı. M˚ uˇze to b´ yt ze dvou d˚ uvod˚ u. Prvn´ım z nich je u ´spora m´ısta a n´asledn´a nutnost pouˇzit´ı extern´ıho pˇrevodn´ıku. Druh´ ym typem jsou ty, jejichˇz ˇcip m´ a v sobˇe tento pˇrevodn´ık zabudovan´ y. Nyn´ı si pˇredvedeme jednotliv´e desky, kter´e jsou pro pˇrehlednost seˇrazeny od tˇech nejmenˇs´ıch po nejvˇetˇs´ı.
2.1
Arduino Mini
Obr´ azek 2.1: Arduino Mini Arduino Mini je asi nejmenˇs´ı ofici´ aln´ı verze Arduina, navrˇzen´a pro u ´sporu m´ısta. Dan´ı za mal´e rozmˇery je vˇsak absence USB portu. K programov´ an´ı je tedy nutn´e pouˇz´ıt extern´ı USB 2 Serial pˇrevodn´ık. Jeho v´ ykon vˇsak nijak nezaost´ av´ a za vˇetˇs´ımi deskami. Bˇeˇz´ı na procesoru ATmega328 (dˇr´ıve ATmega168) s taktem 16 MHz. Pro sv´e mal´e rozmˇery je vhodn´ y k pouˇzit´ı napˇr´ıklad v chytr´ ych vyp´ınaˇc´ıch, d´alkov´ ych ovladaˇc´ıch a podobnˇe.
3
2.2
Arduino Nano
Obr´ azek 2.2: Arduino Nano Arduino Nano se od sv´eho menˇs´ıho sourozence v´ ybavou moc neliˇs´ı. Nejvˇetˇs´ım rozd´ılem je zde vˇsak pˇr´ıtomnost USB portu a pˇrevodn´ıku, kv˚ uli nˇemuˇz je celkov´e proveden´ı o nˇeco vˇetˇs´ı. Odpad´a tak nutnost m´ıt spoleˇcnˇe s deskou jeˇstˇe dalˇs´ı programovac´ı prostˇredek.
2.3
Arduino Micro
Obr´ azek 2.3: Arduino Micro Arduino Micro je jedna z desek, kter´ a m´ a ˇcip obsahuj´ıc´ı pˇrevodn´ık. T´ımto ˇcipem je ATmega32u4. Jeho v´ yhodou je, ˇze se m˚ uˇze pro poˇc´ıtaˇc tv´ aˇrit jako myˇs, nebo kl´avesnice a pos´ılat pˇr´ıkazy, jako jsou stisk kl´ avesy a posunut´ı myˇsi. To je sice moˇzn´e i s ostatn´ımi deskami, ale tato operace vyˇzaduje pˇreprogramov´ an´ı pˇrevodn´ıku (nejˇcastˇeji zaloˇzen´em na ˇcipu ATmega16u2, nebo ATmega8u2), coˇz nemus´ı b´ yt u ´plnˇe jednoduch´e. S touto deskou je tedy velice jednoduch´e vytvoˇrit si vlastn´ı kl´avesnici, nebo hern´ı ovladaˇc.
4
2.4
LilyPad Arduino
Obr´ azek 2.4: Arduino Lilypad Jiˇz pˇri prvn´ım pohledu je jasn´e, ˇze Lilypad Arduino nen´ı u ´plnˇe typick´e. Jedn´a se totiˇz o verzi pˇrizp˚ usobenou k noˇsen´ı na textilu, kdy jsou spoje tvoˇreny vodivou nit´ı. Tak se d´a vyrobit napˇr´ıklad cyklistick´a mikina s pˇriˇsit´ ymi blinkry. Existuje v´ıce druh˚ u t´eto desky. M˚ uˇzeme se setkat s verz´ı s USB a ˇcipem ATmega32u4, nebo bez USB ve verzi ATmega328 a dalˇs´ımi.
2.5
Arduino Fio
Obr´azek 2.5: Arduino Fio Tato deska je pˇrizp˚ usoben´ a k pˇripojen´ı r˚ uzn´ ych bezdr´atov´ ych modul˚ u (XBee moduly). Srdcem je procesor ATmega328P, kter´ y bˇeˇz´ı na frekvenci 8MHz. Napˇet´ı je zde kv˚ uli kompatibilitˇe s moduly sn´ıˇzeno oproti vˇetˇsinˇe ostatn´ıch desek z 5V na 3,3V.
5
2.6
Arduino Uno
Obr´azek 2.6: Arduino Uno Arduino Uno je v souˇcasn´e dobˇe asi nejˇcastˇeji pouˇz´ıvan´ y typ desky. Je pˇr´ım´ ym pokraˇcovatelem hlavn´ı v´ yvojov´e linie, kter´ a zapoˇcala prvn´ım Arduinem se s´eriov´ ym portem m´ısto USB, pokraˇcuj´ıc´ı pˇres Arduino Extreme, NG, Diecimila a Duemilanove aˇz k dneˇsn´ımu Uno. Na desce najdeme procesor ATmega328 a jiˇz klasick´e USB. Z t´eto hlavn´ı linie se vyvinuly i dalˇs´ı dvˇe speci´aln´ı desky. Prvn´ı z nich je Arduino Ethernet, kter´e m´ a stejnou v´ ybavu jako Uno. M´ısto USB portu zde ale najdeme Ethernet port pro pˇripojen´ı k s´ıti. Pˇr´ıjemn´ a je pˇr´ıtomnost slotu pro microSD karty. Druhou deskou je Arduino Bluetooth. Jak uˇz n´ azev napov´ıd´ a, m´ısto USB zde najdeme bluetooth modul pro bezdr´atovou komunikaci. Velmi odlehˇcenou verz´ı Arduina Uno je Arduino Pro. To postr´ad´a USB port a je tedy nutn´e ho programovat extern´ım pˇrevodn´ıkem. Je urˇceno sp´ıˇse k pevn´emu zabudov´an´ı do nˇejak´eho projektu.
2.7
Arduino Leonardo
Obr´ azek 2.7: Arduino Leonardo Arduino Leonardo designovˇe navazuje na Arduino Uno. Liˇs´ı se vˇsak pouˇzit´ ym ˇcipem. T´ım je ATmega32u4, kter´ y byl pops´ an jiˇz u Arduino Micro. Specifika tohoto ˇcipu si pop´ıˇseme d´ale.
6
2.8
Arduino Y´ un
Obr´azek 2.8: Arduino Y´ un Model Arduino Y´ un sice tak´e designovˇe navazuje na Arduino Uno, jedn´a se vˇsak o naprost´eho pr˚ ukopn´ıka. Mimo jiˇz zm´ınˇen´eho ˇcipu ATmega32u4, na kter´em bˇeˇz´ı j´adro Arduina, zde totiˇz najdeme i ˇcip Atheros AR9331, kter´ y je schopn´ y bˇehu odlehˇcen´eho linuxu Linino. Ve v´ ybavˇe je softwarov´ y bridge (prostˇredn´ık, most), kter´ y zajiˇst’uje komunikaci mezi obˇema ˇcipy. V kompaktn´ım obalu tedy z´ısk´ame v porovn´an´ı s velikost´ı velmi v´ ykonn´ y stroj. Na desce najdeme mimo microUSB pro programov´an´ı ATmeaga32u4 i norm´ aln´ı USB pro potˇreby linuxu a Ethernet port pro pˇripojen´ı k s´ıti. M˚ uˇzeme tedy napˇr´ıklad pos´ılat namˇeˇren´e hodnoty pˇr´ımo na webov´ y server.
2.9
Arduino Mega2560
Obr´ azek 2.9: Arduino Mega2560 S Arduino Mega2560 se dost´ av´ ame do skupiny desek, jejichˇz vzhled vznikl prodlouˇzen´ım designu Arduina Uno. Zvˇetˇsen´ı rozmˇer˚ u pˇrin´ aˇs´ı prostor pro vˇetˇs´ı a v´ ykonnˇejˇs´ı ˇcipy a tak´e v´ıce pin˚ u (zd´ıˇrek). Pˇredchoz´ı verz´ı bylo Arduino Mega1280. Hod´ı se tam, kde je zapotˇreb´ı vˇetˇs´ıho v´ ypoˇcetn´ıho v´ ykonu. Zaj´ımavou odnoˇz´ı t´eto desky je Arduino Mega ADK vybaven´e jedn´ım USB nav´ıc pro pˇripojen´ı zaˇr´ızen´ı s Androidem.
7
2.10
Arduino Due
Obr´ azek 2.10: Arduino Due Arduino Due je pokraˇcovatelem Arduina Mega, avˇsak s t´ım rozd´ılem, ˇze bˇeˇz´ı na daleko v´ ykonnˇejˇs´ım ˇcipu. Je j´ım Atmel SAM3X8E, kter´ y tik´ a na taktovac´ı frekvenci 84Mhz a jeho j´adro je 32-bitov´e, coˇz je oproti ostatn´ım desk´ am s 8-bity a maxim´ alnˇe 16MHz opravdu velk´ y skok. Na desce nalezneme dva microUSB konektory. Jeden pro programov´ an´ı ˇcipu, druh´ y pro pˇripojen´ı zaˇr´ızen´ı, jako jsou myˇsi, kl´avesnice, telefony a jin´e.
2.11
Arduino Esplora
Obr´ azek 2.11: Arduino Esplora Arduino Esplora je prvn´ı z desek, kter´e by se daly zaˇradit do kategorie hybridn´ı“. Na prvn´ı pohled ” je viditeln´ y joystick, tlaˇc´ıtka a posuvn´ y potenciometr. Nalezneme zde ale tak´e piezzo bzuˇc´ak, teplomˇer, tˇr´ıos´ y akcelerometr, nebo piny pro pˇripojen´ı LCD displeje. Jedn´a se totiˇz o typ Arduina, se kter´ ym se d´ a vytvoˇrit samostatn´ y hern´ı set, nebo vlastn´ı konzole pro ovl´ad´an´ı her. Jednoduchou komunikaci s PC zajiˇst’uje procesor ATmega32u4.
8
2.12
Arduino Robot
Obr´ azek 2.12: Arduino Robot Jak uˇz n´ azev napov´ıd´ a, jedn´ a se o set pro vytvoˇren´ı vlastn´ıho chytr´eho robota. Jeho mozkem je procesor ATmega32u4. Zaj´ımavost´ı je pˇr´ıtomnost kompasu.
2.13
Arduino Intel Galileo
Obr´ azek 2.13: Arduino Intel Galileo R Tato verze vznikla ve spolupr´ aci se spoleˇcnost´ı Intel. Jedn´a se o prvn´ı desku, kter´a bˇeˇz´ı na ˇcipu Intel Quark SoC X1000, coˇz je 32-bitov´ y procesor s frekvenc´ı 400 MHz. Najdeme zde dvˇe USB, microSD slot i Ethernet port. Uˇziteˇcn´ a m˚ uˇze b´ yt tak´e pˇr´ıtomnost mini-PCI Express slotu, pro pˇripojen´ı r˚ uzn´ ych pˇr´ıdavn´ ych karet.
9
2.14
Arduino Tre
Obr´azek 2.14: Arduino Tre V souˇcasn´e dobˇe chystan´e Arduino Tre bude zat´ım nejv´ ykonnˇejˇs´ı typ. Mˇelo by obsahovat 1 GHz procesor, schopn´ y bˇehu velmi n´ aroˇcn´ ych v´ ypoˇcetn´ıch aplikac´ı. Stejnˇe jako Arduino Y´ un bude obsahovat dva procesory. Jeden pro j´ adro Arduina a druh´ y pro linux. Na desce tak´e nalezneme HDMI port, dva audio konektory, jeden USB port pro programov´ an´ı a 4 USB porty pro pˇripojen´ı dalˇs´ıch zaˇr´ızen´ı k linuxu. Uˇz z hardwarov´e v´ ybavy je patrn´e, ˇze bude moci Arduino Tre konkurovat i jin´ ym menˇs´ım poˇc´ıtaˇc˚ um jako je napˇr´ıklad Raspberry Pi. P˚ uvodnˇe v´ yrobce sliboval dostupnost na jaˇre 2014. V ˇr´ıjnu 2014 ale st´ale nen´ı jasn´e, kdy se skuteˇcn´e zaˇcne prod´ avat.
10
Kapitola 3
Arduino Shieldy Kdyˇz se chceme na bˇeˇzn´em stoln´ım poˇc´ıtaˇci pˇripojit k WiFi, vˇetˇsinou nem´ame jinou moˇznost, neˇz si dokoupit WiFi kartu. Kdyˇz chceme poslouchat, nebo nahr´avat dobrou hudbu, mus´ıme pˇripojit kvalitn´ı zvukovou kartu. A stejn´e to je u Arduina. Kdyˇz nˇeco nezvl´adne, nemus´ı b´ yt jeˇstˇe vˇsemu konec. Staˇc´ı si vybrat z rozs´ ahl´e nab´ıdky tzv. shield˚ u a vybran´ y shield pot´e nasunout do zd´ıˇrek na Arduinu. Stejnˇe jako desek existuje i cel´ a ˇrada shield˚ u. Z tˇech ofici´aln´ıch jsou to ale Ethernet Shield, Wifi Shield, Motor Shield a Dalˇs´ı. Pˇri v´ ybˇeru je vˇsak nutn´e d´ at si pozor na to, aby byl vybran´ y shield s Arduinem kompatibiln´ı. Na obr´ azku vid´ıte, jak vypad´ a takov´ y Ethernet shield.
Obr´ azek 3.1: Arduino Ethernet Shield
11
Kapitola 4
Arduino klony Jak uˇz jsem naznaˇcil dˇr´ıve, spoleˇcnˇe s ofici´aln´ı ˇradou existuje jeˇstˇe spousta dalˇs´ıch, neofici´aln´ıch desek. Jedn´ a se o takzvan´e klony. Pozn´ ame je podle toho, ˇze maj´ı ˇcasto v n´azvu -duino (n´azev Arduino je chr´ anˇen´ y autorsk´ ymi pr´ avy, -duino a podobn´e ˇc´asti jsou v n´azvu pˇr´ıpustn´e). Jelikoˇz jsou vˇsechna sch´emata, souˇc´ astky i software dostupn´e online zdarma, m˚ uˇze si prakticky kaˇzd´ y sestavit sv´e Arduino takˇrka na koleni“. M˚ uˇzeme se tedy setkat s klony tvarovˇe a v´ ybavou totoˇzn´ ymi s ofici´aln´ımi modely. ” ˇ Nen´ı to vˇsak pravidlem. Casto jsou k vidˇen´ı i desky, kter´e jsou uzp˚ usoben´e ke konkr´etn´ı ˇcinnosti. Pˇr´ıklady klon˚ u jsou: • ArduPilot – navrˇzen´ y pro ovl´ ad´ an´ı autonomn´ıch l´etaj´ıc´ıch zaˇr´ızen´ı (letadla, kvadrokopt´ery. . . ) • Freaduino, Seeeduino – o nˇeco levnˇejˇs´ı kopie origin´aln´ıch desek • Rainbowduino – pˇripraven´e k nasazen´ı a ˇr´ızen´ı maticov´eho RGB LED displeje, je moˇzn´e je sestavovat do vˇetˇs´ıch celk˚ u • A dalˇs´ı. . .
12
ˇ ast II C´
Programujeme Arduino
13
V prvn´ı kapitole jsme se mohli dozvˇedˇet nˇeco o historii Arduina. Tak´e jsme si uk´azali desky z ofici´aln´ı ˇrady a zm´ınili jsme i existenci shield˚ u. V z´avˇeru ˇcl´anku pˇriˇsla ˇreˇc na neofici´aln´ı klony. Dnes uˇz se tedy m˚ uˇzeme pustit do praktick´eho pouˇzit´ı. Na zaˇc´atku si vybereme vhodn´e Arduino a na nˇem si uk´aˇzeme, ˇ co vˇsechno se d´ a na desce naj´ıt. Rekneme si nˇeco o programovac´ım jazyku a o v´ yvojov´em prostˇred´ı pro Arduino. Na z´ avˇer si vyzkouˇs´ıme prvn´ı program, kter´ y bude blikat LED diodou.
14
Kapitola 5
V´ ybˇ er a sezn´ amen´ı Pˇred t´ım, neˇz zaˇcneme s Arduinem pracovat si mus´ıme nˇejak´ y vhodn´ y model vybrat. Pokud jsou c´ılem co nejmenˇs´ı v´ yrobky, bude nejlepˇs´ı s´ ahnout po nˇejak´e z menˇs´ıch desek (Mini, Nano, Micro). Pokud vˇsak hled´ ate velmi v´ ykonn´e modely, kter´e zastanou m´enˇe v´ ykonn´e poˇc´ıtaˇce. Tˇemito modely jsou napˇr´ıklad DUE, ˇci Intel Galileo. Zlatou stˇredn´ı cestou jsou modely Uno a Mega 2560. Pro jednoduch´e zkouˇsen´ı zapojen´ı a nen´ aroˇcn´ ych modul˚ u je Uno plnˇe dostaˇcuj´ıc´ı. Na nˇej je tak´e designov´ana vˇetˇsina shield˚ u. Arduino Mega 2560 na druhou stranu nab´ıdne daleko v´ıce vstupn´ıch a v´ ystupn´ıch pin˚ u. Vyberme si tedy pro u ´ˇcel n´ asleduj´ıc´ıho popisu model Arduino Uno. N´ıˇze uveden´e ˇc´asti najdeme v r˚ uzn´ ych obmˇen´ach na vˇetˇsinˇe desek.
15
Obr´ azek 5.1: Co nalezneme na desce Arduino
1. Pod ˇc´ıslem jedna se skr´ yv´ a resetovac´ı tlaˇc´ıtko. To pouˇzijeme, pokud chceme n´aˇs program spustit znovu od zaˇc´ atku. U r˚ uzn´ ych typ˚ u Arduina se m˚ uˇzeme setkat i s jin´ ym um´ıstˇen´ım tohoto tlaˇc´ıtka. Vˇetˇsinou je ale toto tlaˇc´ıtko popsan´e n´apisem RESET. 2. USB konektor typu B. U nejstarˇs´ıho modelu najdeme m´ısto USB s´eriov´ y port. U nˇekter´ ych novˇejˇs´ıch model˚ u se setk´ ame s micro USB. Na nˇekter´ ych desk´ach ho v˚ ubec nenajdeme, protoˇze maj´ı bud’ jin´ y zp˚ usob pˇripojen´ı (Ethernet, BT), nebo pro programov´an´ı vyˇzaduj´ı pˇripojen´ı extern´ıho program´ atoru. 3. Nap´ ajec´ı konektor. Vyuˇzijeme ho, pokud nebudeme Arduino nap´ajet z USB. 4. ICSP hlavice pro extern´ı programov´ an´ı USB-serial pˇrevodn´ıku. Bˇeˇzn´ y uˇzivatel ji nepouˇzije. U verz´ı bez pˇrevodn´ıku, nebo s pˇrevodn´ıkem obsaˇzen´ ym v hlavn´ım ˇcipu ji nenajdeme. 5. USB-serial pˇrevodn´ık. Ten se star´ a o komunikaci mezi hlavn´ım ˇcipem a PC. Pln´ı zde roli pˇrekladatele. U verz´ı bez pˇrevodn´ıku, nebo s pˇrevodn´ıkem obsaˇzen´ ym v hlavn´ım ˇcipu ho nenajdeme. 6. Indikaˇcn´ı LED diody L, Rx a Tx. Dioda s popisem L je ˇcasto vyuˇz´ıvan´a. Je totiˇz pˇripojen´a k v´ ystupu ˇc. 13. S n´ı se tedy d´ a vyzkouˇset blik´an´ı i bez pˇripojen´e extern´ı LEDky. Nˇekter´a Arduina ji vˇsak v˚ ubec neobsahuj´ı. Diody s popisem Tx a Rx blikaj´ı, pokud prob´ıh´a komunikace pˇres s´eriovou linku. 7. Hlavn´ı ˇcip cel´e desky. V r˚ uzn´ ych podob´ach a typech ho najdeme na vˇsech desk´ach. 8. Indikaˇcn´ı LED dioda ON. Sv´ıt´ı, kdyˇz je pˇripojen´e nap´ajen´ı. 9. ICSP hlavice pro extern´ı programov´ an´ı hlavn´ıho ˇcipu. Vyuˇz´ıvaj´ı ji nˇekter´e shieldy. 10. Digit´ aln´ı piny. Do tˇechto zd´ıˇrek budeme pˇripojovat vˇsemoˇzn´e obvody. V´ yvody oznaˇcen´e vlnovkou podporuj´ı PWM modulaci, o kter´e si pov´ıme pozdˇeji. 11. Pˇrev´ aˇznˇe nap´ ajec´ı v´ ystupy Arduina. 12. Analogov´e vstupy. Sem pˇripoj´ıme vodiˇce, na kter´ ych budeme cht´ıt mˇeˇrit nˇejakou analogovou hodnotu. Daj´ı se vyuˇz´ıt i jako digit´ aln´ı vstupy a v´ ystupy.
16
Kapitola 6
Arduino IDE 6.1
Historie
Arduino IDE (integrated development enviroment = integrovan´e v´ yvojov´e prostˇred´ı) je napsan´e v jazyce Java. Jedn´ a se o software vznikl´ y z v´ yukov´eho prostˇred´ı Processing. To bylo m´ırnˇe upraveno, byly pˇridan´e urˇcit´e funkce a v neposledn´ı ˇradˇe podpora jazyka Wiring.
6.2
Staˇ zen´ı a instalace
Arduino IDE si m˚ uˇzeme st´ ahnout zde [en]. V t´eto dobˇe je posledn´ı verz´ı Arduino 1.0.5 (1.5 je st´ale ve verzi Beta). Najdeme si tedy na posledn´ı fin´aln´ı verzi a st´ahneme ji pro poˇzadovan´ y operaˇcn´ı syst´em. Pro Windows je nejjednoduˇsˇs´ı st´ ahnout si ZIP archiv, kter´ y je po rozbalen´ı plnˇe funkˇcn´ı. Pro Linux se instalace m˚ uˇze liˇsit i podle distribuc´ı. Popis pro jednotliv´e distribuce nalezneme zde[en]. Mus´ıme tak´e zm´ınit dalˇs´ı velk´ y operaˇcn´ı syst´em, j´ımˇz je Mac OS. N´avod na instalaci nalezneme zde[en]. N´asleduj´ıc´ı ˇc´ ast ˇcl´ anku se bude vˇenovat pouˇzit´ı Arduina s operaˇcn´ım syst´emem Windows. Pˇredpokl´adejme, ˇze m´ame staˇzen´ y ZIP archiv verze 1.0.6. Vybereme si sloˇzku, ve kter´e chceme m´ıt software pro Arduino a zde archiv rozbal´ıme. Po rozbalen´ı obsahuje dalˇs´ı sloˇzky a soubory. Sloˇzka Drivers obsahuje ovladaˇce pro komunikaci Arduina s PC. V Examples nalezneme pˇr´ıklady k´od˚ u. D˚ uleˇzitou sloˇzkou je sloˇzka Libraries, kam se ukl´ adaj´ı knihovny. To jsou bal´ıky obsahuj´ıc´ı rozˇsiˇruj´ıc´ı funkce pro programov´an´ı. Jeˇstˇe neˇz si IDE spust´ıme si vytvoˇr´ıme v uˇzivatelsk´e sloˇzce Dokumenty sloˇzku Arduino. Tuto sloˇzku vˇetˇsinou nalezneme na um´ıstˇen´ı: C:Usersjmeno uzivateleDocuments. Zde si vytvoˇr´ıme sloˇzku Arduino a v n´ı sloˇzku libraries. Sem si budeme ukl´ adat vytvoˇren´e programy a do sloˇzky libraries pˇridan´e knihovny. Ty n´am zde z˚ ustanou st´ ale stejn´e, i kdyˇz pˇrejdeme na novˇejˇs´ı verzi Arduino IDE. Nyn´ı uˇz n´as bude zaj´ımat pouze soubor arduino.exe ve staˇzen´em bal´ıku, kter´ y spust´ı v´ yvojov´e prostˇred´ı. Spust’me si ho tedy a ukaˇzme si jeho nejd˚ uleˇzitˇejˇs´ı funkce.
17
6.3
Pouˇ z´ıv´ an´ı
Obr´azek 6.1: Arduino IDE V´ yvojov´e prostˇred´ı m˚ uˇzete vidˇet na obr´ azku. V prvn´ım ˇr´adku navigaˇcn´ıch prvk˚ u n´as bude zaj´ımat pouze rozbalovac´ı nab´ıdka Tools, ve kter´e nalezneme nastaven´ı pro pˇripojen´ı a programov´an´ı desky. Jej´ı funkce si pop´ıˇseme pozdˇeji. V dalˇs´ım ˇr´ adku nalezneme nˇekolik ikon. Jako prvn´ı z leva nalezneme ikonu s fajfkou – Verify. Ta po kliknut´ı spust´ı kontrolu programu a zkontroluje k´od. Pokud nalezne nˇejakou chybu, v syntaxi ji zv´ yrazn´ı. Vedle nalezneme ikonu s ˇsipkou doprava – Upload. Ta spust´ı kontrolu programu, a pokud nenalezne ˇz´ adn´e chyby, nahraje program do pˇripojen´eho Arduina. Dalˇs´ı je ikona se symbolem pˇreloˇzen´e str´ anky – New, kter´ a po kliknut´ı vytvoˇr´ı nov´ y soubor. Dalˇs´ı tlaˇc´ıtko s ˇsipkou nahoru – Open – otevˇre nab´ıdku pro otevˇren´ı program˚ u (vˇcetnˇe tˇech, kter´e m´ame uloˇzen´e v Dokumentech). Tlaˇc´ıtko s ˇsipkou dol˚ u – Save – uloˇz´ı souˇcasn´ y program. Ve stejn´em ˇr´adku nalezneme u ´plnˇe vpravo jeˇstˇe ikonu s lupou – Serial Monitor. Ta spust´ı s´eriov´ y monitor, o kter´em si v´ıce pov´ıme pˇr´ıˇstˇe. Velk´ y b´ıl´ y prostor slouˇz´ı k z´ apisu k´ odu a ˇcern´ y prostor dole zobrazuje informaˇcn´ı a chybov´e v´ ypisy z bˇehu prostˇred´ı.
18
6.4
Programovac´ı jazyk
Arduino je moˇzn´e programovat v jazyce C nebo C++. Nejjednoduˇsˇs´ı je vˇsak pouˇz´ıvat knihovnu Wiring. Ta je v souˇcasn´e dobˇe pro programov´ an´ı Arduina velmi rozˇs´ıˇren´a. Kv˚ uli jej´ı komplexnosti se o n´ı obˇcas mluv´ı jako o samostatn´em programovac´ım jazyku. Pro prvn´ı sezn´amen´ı si otevˇreme pˇr´ıklad BareMinimum. Klikneme na ikonu Open a v rozbalovac´ım seznamu 01.Basics vybereme moˇznost BareMinimum. V editoru se n´ am zobraz´ı n´ asleduj´ıc´ı k´ od. 1 2 3 4 5
void setup() {
6 7 8 9
void loop() {
// put your setup code here, to run once:
}
// put your main code here, to run repeatedly:
} Na uk´ azkov´em k´ odu si m˚ uˇzeme vˇsimnout hned dvou vˇec´ı. Prvn´ı z nich je pˇr´ıtomnost dvou blok˚ u programu. V horn´ı ˇc´ asti nalezneme blok (funkci) void setup() . Mezi sloˇzen´e z´avorky se v tomto bloku p´ıˇse k´od, kter´ y se provede pouze jednou na zaˇc´ atku programu. To znamen´a bud’ po pˇripojen´ı nap´ajen´ı, zm´aˇcknut´ı tlaˇc´ıtka restart, nebo nahr´ an´ı k´ odu do Arduina. Druh´ ym blokem (funkc´ı) je void loop() , do jehoˇz sloˇzen´ ych z´ avorek se zapisuje k´ od, kter´ y se bude opakovat neust´ale dokola aˇz do odpojen´ı nap´ajen´ı. Tyto dvˇe ˇ ˇc´ asti mus´ı b´ yt v programu VZDY – tedy i kdyˇz neobsahuj´ı ˇz´adn´e pˇr´ıkazy. Pˇri jejich absenci by program skonˇcil chybou. D´ ale bychom si mˇeli vˇsimnout dvojit´eho lom´ıtka. To n´am znaˇc´ı koment´aˇre v programu. ˇ ast k´ C´ odu, nebo textu zapsanou za podtrˇz´ıtkem bude program ignorovat. Pouˇz´ıv´a se, kdyˇz si chceme k ˇc´ asti k´ odu zapsat pozn´ amku, nebo kdyˇz chceme na chv´ıli vyˇradit ˇc´ast k´odu z provozu. M˚ uˇzeme se setkat s dvˇema typy koment´ aˇr˚ u:
1
jednoradkovy komentar
2 3 4 5 6 7
//kdyz radek zacina dvojitym podtrzitkem, jedna se o jednoradkovy komentar //vse, co je v radku za nim program ignoruje
8 9 10 11 12 13
to co se vsak nachazi na dalsim radku je brano jako normalni kod druhym typem jsou viceradkove komentare /∗ ty zacinaji podtrzitkem a hvezdickou mohou mit libovolny pocet radku a konci hvezdickou a podtrzitkem ∗/
19
Kapitola 7
Blik´ ame LED 7.1
Budeme potˇ rebovat
1. Arduino Uno(nebo jinou desku) 2. USB kabel 3. Nep´ ajiv´e kontaktn´ı pole 4. LED Dioda – staˇc´ı obyˇcejn´ a za 1 Kˇc 5. Vodiˇce – dobrou kombinac´ı obsahuj´ıc´ı nep´ajiv´e pole i vodiˇce je tento set. 6. 330 ohm rezistor – zapojen´ı sice bude fungovat i bez nˇej, ale je nutn´e ho pouˇz´ıt.
7.2
Pˇ ripojen´ı Arduina a PC
Arduino Uno pˇripoj´ıme pomoc´ı USB k poˇc´ıtaˇci. Mˇelo by se n´am objevit instalaˇcn´ı okno. Pokud se instalace nov´eho zaˇr´ızen´ı nepovede, nedˇeste se. Nyn´ı pˇrich´az´ı na ˇradu staˇzen´a sloˇzka Drivers. V nab´ıdce Start ¿ Ovl´ adac´ı panely otevˇreme Spr´ avce zaˇr´ızen´ı. Zde najdeme naˇse Arduino. Prav´ ym tlaˇc´ıtkem otevˇreme okno Vlastnosti a na kartˇe Ovladaˇc zm´ aˇckneme tlaˇc´ıtko Aktualizovat ovladaˇc (k tomu je vˇsak nutn´e m´ıt opr´ avnˇen´ı spr´ avce). Pot´e vybereme moˇznost Vyhledat ovladaˇc v poˇc´ıtaˇci a navedeme instalaˇcn´ı program do um´ıstˇen´ı sloˇzky Drivers. Nakonec zm´ aˇcknut´ım tlaˇc´ıtka dalˇs´ı nainstalujeme ovladaˇc. Nyn´ı jeˇstˇe mus´ıme nastavit Arduino IDE. Otevˇreme nab´ıdku Tools a v seznamu Boards vybereme Arduino Uno. Pot´e v Tools -¿ Serial Port vyberte s´eriov´ y port, na kter´ y je Arduino pˇripojeno (vˇetˇsinou je to jedin´ y port v seznamu). T´ımto je za n´ ami nastavov´an´ı a m˚ uˇzeme se pustit do zapojov´an´ı.
20
7.3
Zapojen´ı
Vezmeme si LED diodu, vodiˇce a rezistor a vˇse zapoj´ıme tak, jak je vidˇet na obr´azku.
Obr´ azek 7.1: Sch´ema zapojen´ı pˇr´ıkladu Blink
7.4
Program
Nyn´ı uˇz n´ am nezb´ yv´ a nic jin´eho, neˇz do editoru vloˇzit n´asleduj´ıc´ı program a stiskem tlaˇc´ıtka Upload nahr´ at k´ od do Arduina. Pokud vˇse probˇehlo v poˇr´adku, LED dioda zaˇcne blikat. 1 2 3 4 5 6 7 8 9 10
void setup() { pinMode(12, OUTPUT); //nastav pin 12 jako vystup } void loop() { digitalWrite(12, HIGH); //na pinu 12 pust proud delay(1000); //pockej 1000 ms = 1 s digitalWrite(12,LOW); //na pinu 12 vypni proud delay(1000); }
21
ˇ ast III C´
Z´ akladn´ı struktury jazyka Wiring
22
´ V pˇredchoz´ı ˇc´ asti jsme si uk´ azali prvn´ı program, ve kter´em Arduino blikalo LED diodou. Uvodn´ ı sezn´amen´ı je tedy za n´ ami a m˚ uˇzeme se pustit do dalˇs´ıho programov´an´ı. V dneˇsn´ım ˇcl´anku se pod´ıv´ame na z´akladn´ı n´ aleˇzitosti jazyka Wiring. Na zaˇc´ atek si vysvˇetl´ıme, jak Arduino komunikuje s poˇc´ıtaˇcem. Pot´e si ˇrekneme, jak pouˇz´ıvat promˇenn´e a jak pracovat se vstupy a v´ ystupy Arduina.
23
Kapitola 8
S´ eriov´ a komunikace Aby mohlo Arduino spr´ avnˇe komunikovat s PC, mus´ı m´ıt nˇekolik z´akladn´ıch souˇc´ast´ı. N´asleduj´ıc´ı popis postihuje vˇetˇsinu desek Arduino. Najdou se vˇsak i speci´aln´ı desky, kter´e podporuj´ı jin´ y zp˚ usob programov´ an´ı (BT, Ethernet, Wifi. . . ), ale tˇemi se d´ale zab´ yvat nebudeme. Popiˇsme si tedy proces programov´an´ı, se kter´ ym se setk´ ame u vˇetˇsiny desek. Co je ke komunikaci potˇreba:
Obr´ azek 8.1: Sch´ema s´eriov´e komunikace
1. Z´ akladn´ım pˇredpokladem je m´ıt PC s USB portem. 2. USB kabel 3. S pˇrevodn´ıkem se n´ am sch´ema trochu komplikuje. M˚ uˇzeme se totiˇz setkat se tˇremi z´akladn´ımi typy pˇrevodn´ıku. Vˇsechny tˇri pˇrevodn´ıky funguj´ı stejnˇe. Liˇs´ı se pouze zp˚ usobem pˇripojen´ı. (a) Pˇrevodn´ık, kter´ y je na pevno pˇrip´ajen´ y k z´akladn´ı desce Arduina. (b) Pˇrevodn´ık, kter´ y maj´ı nˇekter´e ˇcipy (ATmega32u4. . . ) pˇr´ımo v sobˇe. (c) Extern´ı pˇrevodn´ık, kter´ y mus´ıme pˇri programov´an´ı Arduina pˇripojit. 4. Pˇripojen´ı pˇrevodn´ıku a ˇcipu. Pˇri pouˇzit´ı extern´ıho pˇrevodn´ıku se vˇetˇsinou jedn´a o ˇsest vodiˇc˚ u, kter´e vystupuj´ı z desky. U zbyl´ ych dvou typ˚ u pˇrevodn´ıku jsou to pouze kontakty na ploˇsn´em spoji, nebo propojen´ı uvnitˇr ˇcipu. 5. Mozek, kter´ y pˇrij´ım´ a pˇreloˇzen´e instrukce od pˇrevodn´ıku.
24
Takto vypad´ a Arduino Pro s pˇripojen´ ym extern´ım pˇrevodn´ıkem.
Obr´ azek 8.2: Arduino Pro s extern´ım pˇrevodn´ıkem S´eriov´ a komunikace se ale d´ a vyuˇz´ıt k v´ıce vˇecem, neˇz jen k programov´an´ı. Pomoc´ı n´ı totiˇz m˚ uˇzeme komunikovat s Arduinem, i kdyˇz uˇz na nˇem bˇeˇz´ı n´aˇs program. Pot´e m˚ uˇzeme napˇr´ıklad ˇc´ıst hodnoty ze senzor˚ u a pos´ılat je do PC, nebo ovl´ adat Arduino jednoduch´ ymi textov´ ymi pˇr´ıkazy. Pouˇz´ıv´an´ı tˇechto funkc´ı si pop´ıˇseme za chv´ıli, kdy uˇz budeme m´ıt dostatek informac´ı k jejich pochopen´ı.
25
Kapitola 9
Promˇ enn´ e Promˇenn´ a je m´ısto ve kter´em se daj´ı uchov´avat data. Kaˇzd´a promˇenn´a m´a vlastn´ı jm´eno, datov´ y typ a ˇ hodnotu. Casto se pouˇz´ıvaj´ı napˇr´ıklad tam, kde se v programu dokola opakuj´ı ty sam´e hodnoty. Praktick´e vyuˇzit´ı promˇenn´ ych si uk´ aˇzeme na n´ asleduj´ıc´ım pˇr´ıkladu napsan´em v pseudok´odu: Pˇredstavme si, ˇze m´ ame nˇekolik oˇc´ıslovan´ ych svˇetel. Vˇzdy si vybereme jedno, se kter´ ym budeme blikat. 1 2 3 4 5 6 7
zapniSvetlo(10); //zapni desate svetlo vypniSvetlo(10); //vypni desate svetlo zapniSvetlo(10); vypniSvetlo(10); zapniSvetlo(10); vypniSvetlo(10); ... Nyn´ı si stejn´ y program pˇrep´ıˇseme s uˇzit´ım promˇenn´ ych.
1 2 3 4 5 6 7 8 9 10
cislo A = 10; //promenna se jmenuje A, je datoveho typu cislo a ma hodnotu 10
zapniSvetlo(A); vypniSvetlo(A); zapniSvetlo(A); vypniSvetlo(A); zapniSvetlo(A); vypniSvetlo(A); ... Kdybychom chtˇeli zmˇenit svˇetlo, se kter´ ym blik´ame, museli bychom v prvn´ım pˇr´ıpadˇe zmˇenit vˇsechny ˇc´ısla 10 na jin´ a. V pˇr´ıpadˇe druh´em n´ am staˇc´ı pˇrepsat pouze hodnotu promˇenn´e a program ji uˇz s´am dosad´ı na vˇsechna potˇrebn´ a m´ısta.
26
9.1
Pr´ ace s promˇ enn´ ymi
Nyn´ı uˇz se pod´ıv´ ame na to, jak pracovat s promˇenn´ ymi v jazyce Wiring. Jedn´ım z ˇc´ıseln´ ych datov´ ych typ˚ u je typ integer (zkracuje se na int). Ukaˇzme si tedy, jak vytvoˇrit promˇennou, kter´a v sobˇe uchov´a ˇc´ıselnou hodnotu. Abychom mohli v programu s promˇennou pracovat, mus´ıme ji nejprve deklarovat ( vytvoˇrit“). ” Pot´e j´ı m˚ uˇzeme pˇriˇradit hodnotu. 1 2 3 4 5 6
//deklarace promenne x
7
int y = 10;
int x; //prirazeni hodnoty
x = 10; //tyto dve operace se daji spojit do jedne
Vytvoˇrit promˇennou ale nem˚ uˇzeme jen tak nˇekde. Kdyˇz budeme cht´ıt pouˇz´ıvat danou promˇennou vˇsude v programu, mus´ıme ji vytvoˇrit vnˇe vˇsech funkc´ı (tedy i mimo funkce setup a loop). Pokud n´am staˇc´ı pouˇz´ıvat promˇennou uvnitˇr jedn´e funkce a nikde jinde ji nepotˇrebujeme, staˇc´ı, kdyˇz ji deklarujeme uvnitˇr funkce. 1 2 3 4 5 6 7 8 9 10 11
int x = 10; //tuto promennou muzeme pouzit vsude void setup() { int y = 11; //uvnitr teto funkce muzeme pouzit promenne x a y
} void loop() { int z = 12; //zde muzeme pouzit promenne x a z
} Pokud bychom se pokusili do Arduina nahr´at k´od, ve kter´em pouˇz´ıv´ame promˇennou y ve funkci loop (nebo z ve funkci setup), pˇreklad k´ odu skonˇc´ı s chybovou hl´aˇskou a do Arduina se nic nenahraje.
27
9.2
Datov´ e typy
Jak uˇz jsem naznaˇcil dˇr´ıve, kaˇzd´ a promˇenn´a m´a sv˚ uj datov´ y typ. Ten n´am ˇr´ık´a, jak´a data m˚ uˇzeme v promˇenn´e naj´ıt. M˚ uˇze se jednat o logick´e hodnoty (true/false), znaky, nebo ˇc´ısla. Pojd’me si nyn´ı pˇredstavit z´ akladn´ı typy. ˇ ıseln´e datov´e typy C´ • byte – Promˇenn´ a datov´eho typu byte m´a velikost 8 bit˚ u a slouˇz´ı k uchov´an´ı cel´ ych ˇc´ısel. Jej´ı rozsah je 28 hodnot – 0 aˇz 255 • integer – V programech se pouˇz´ıv´ a jen zkratka int. Slouˇz´ı k ukl´ad´an´ı cel´ ych ˇc´ısel. Rozsah tohoto datov´eho typu se liˇs´ı podle pouˇzit´eho procesoru a zasahuje jak do kladn´ ych, tak i do z´aporn´ ych ˇc´ısel. Nula leˇz´ı pˇribliˇznˇe v polovinˇe rozsahu. U desek s procesory Atmega (tedy naprost´a vˇetˇsina) uchov´ av´ a 16-bit hodnotu – tedy od -32,768 do 32,767. U Arduino DUE s procesorem SAM je tato hodnota 32-bitov´ a a m˚ uˇze obsahovat ˇc´ısla od -2,147,483,648 do 2,147,483,647. • long – Slouˇz´ı k uchov´ an´ı celoˇc´ıseln´ ych 32 bitov´ ych hodnot od -2,147,483,648 do 2,147,483,647. • float – Tento datov´ y typ je urˇcen´ y pro uchov´an´ı ˇc´ısel s desetinnou ˇc´arkou. V jazyce Wiring se vˇsak pouˇz´ıv´ a desetinn´ a teˇcka. Jeho velikost je 32 bit˚ u. M˚ uˇzeme v nˇem ukl´adat hodnoty od -3,4028235 * 1038 do 3,4028235 * 1038. Logick´ y datov´ y typ • boolean – Promˇenn´e tohoto datov´eho typu v sobˇe uchov´avaj´ı pouze dvˇe hodnoty. Bud’to true (pravda), nebo false (nepravda). Znakov´ y datov´ y typ • char – Tento datov´ y typ slouˇz´ı k uchov´an´ı jednoho znaku textu. Znak je zde uchov´an jako jeho ˇc´ıseln´ a hodnota v ASCII tabulce znak˚ u. P´ısmena, slova i vˇety se p´ıˇs´ı v uvozovk´ach. K uchov´an´ı ˇretˇezc˚ u textu slouˇz´ı typ string, kter´ ym se budeme zab´ yvat za chv´ıli.
1 2 3 4 5 6
//byte
7 8 9 10 11 12
//float
13 14 15
//char
byte a = 12; //integer
int b = 400; //long
long c = 12121212; float d = 1.256; //boolean
boolean e = false;
char f = ’A’; char f = 65; //v ASCII tabulce znaku ma A hodnotu 65 Existuj´ı i dalˇs´ı ˇc´ıseln´e datov´e typy, ale ty se nepouˇz´ıvaj´ı moc ˇcasto. Jejich popis nalezneme v Arduino Reference [EN] v prostˇredn´ım sloupci v ˇc´ asti Data Types.
28
Kapitola 10
Pole Pole (anglicky array) je speci´ aln´ı typ promˇenn´e. Umoˇzn ˇuje shrom´aˇzdit v´ıce hodnot do jedn´e promˇenn´e. M˚ uˇzete si jej pˇredstavit, jako krabiˇcku, kter´a m´a jednotliv´e pˇrihr´adky oˇc´ıslovan´e. Kdyˇz v´ıme, jakou krabiˇcku pouˇz´ıv´ ame a do jak´e pˇrihr´ adky se chceme pod´ıvat, m˚ uˇzeme se dostat k poˇzadovan´e hodnotˇe. V program´ atorsk´e terminologii se ˇc´ısl˚ um pˇrihr´adek ˇr´ık´a index.
10.1
Deklarace pole
Jejich deklarace je podobn´ a, jako u promˇenn´ ych – kaˇzd´e pole m´a datov´ y typ hodnot, kter´e v nˇem najdeme, jm´eno, hodnoty a nav´ıc i velikost pole. 1 2 3
//pole muzeme deklarovat nekolika zpusoby int jmeno[6]; //deklarace pole s sesti bunkami int jmeno[] = {2, 3, 4, 5}; //prvky v poli oddelujeme carkami
4 5 6 7 8 9
int jmeno[4] = {2, 3, 4, 5}; //v tomto pripade velikost pole uvest muzeme, nemusime
10 11 12
//zvlastnim typem pole je pole znaku (nazyvane retezec − string) //umoznuje totiz specificky zpusob prirazeni hodnoty char jmeno[15]; //deklarace retezce
char char char char
jmeno[] = {’a’, ’r’, ’d’, ’u’, ’i’, ’n’, ’o’}; jmeno[7] = {’a’, ’r’, ’d’, ’u’, ’i’, ’n’, ’o’}; jmeno[] = ”arduino”; jmeno[7] = ”arduino”;
10.2
Pˇ r´ıstup k hodnot´ am v poli
Ve vˇetˇsinˇe programovac´ıch jazyk˚ u jsou indexy v poli ˇc´ıslov´any od nuly. Prvek na prvn´ım m´ıstˇe m´a tedy ˇ ı hodnoty prvku pole pot´e prob´ıh´a stejnˇe, jako u promˇenn´ index 0. Cten´ ych, jen mus´ıme pˇripojit jeˇstˇe jeho index. 1 2
int a[] = {1,2,3,5,7,11,13,17}; //deklarace pole a
3 4 5
a[0]; //prvek s indexem 0 ma hodnotu 1 a[5]; //prvek s indexem 5 ma hodnotu 11 ...
29
Kapitola 11
Digit´ aln´ı vstup a v´ ystup Jelikoˇz je Arduino urˇceno k dalˇs´ımu rozˇsiˇrov´an´ı, obsahuje vstupy a v´ ystupy (naz´ yvan´e piny), ke kter´ ym se d´ a vodiˇcem pˇripojit dalˇs´ı obvody, ˇcipy, rel´e, pamˇeti atd.. My uˇz jsme se s takov´ ymto pˇr´ıpadem setkali v minul´em ˇcl´ anku, kdyˇz jsme blikali LED diodou. K pr´aci s tˇemito piny m´a Arduino k dispozici jednoduch´e funkce. Nejdˇr´ıve ze vˇseho je vˇsak potˇreba programu ˇr´ıci, jestli s pinem pracujeme jako se vstupem, nebo v´ ystupem.
11.1
Vstup nebo v´ ystup?
K nastaven´ı pinu slouˇz´ı funkce pinMode(). Ta pro svoji spr´avnou ˇcinnost potˇrebuje dva vstupn´ı parametry – pinMode(cislo pinu, INPUT/OUTPUT); Pokud chceme dan´ y pin pouˇz´ıvat jako vstup, bude druh´ y ˇ ıslo pinu je vˇetˇsinou natiˇstˇeno na desce parametr INPUT, pokud jako v´ ystup, bude to OUTPUT. C´ Arduina. Ve verzi Arduino UNO tedy m˚ uˇzeme pouˇz´ıvat piny 0 aˇz 13. T´ımto ale nekonˇc´ı, protoˇze m˚ uˇzeme k digit´ aln´ım operac´ım pouˇz´ıvat i piny oznaˇcen´e jako ANALOG IN, jenom m´ısto samotn´eho ˇc´ısla mus´ıme pˇred ˇc´ıslo napsat A. U Arduina UNO jsou to tedy A0 aˇz A5. 1 2 3 4
byte cislo = 13; pinMode(cislo, OUTPUT); //nastaveni pinu 13 na vystup pinMode(12, INPUT); //a pinu 12 na vstup
11.2
Ovl´ ad´ an´ı v´ ystupu
K ovl´ ad´ an´ı v´ ystupu se pouˇz´ıv´ a funkce digitalWrite(). S touto funkc´ı jsme se setkali jiˇz v minul´em ˇcl´anku, kdyˇz jsme blikali LED diodou. Stejnˇe jako pinMode() potˇrebuje i tato funkce dva parametry – ˇc´ıslo pinu a informaci o proudu. Pokud proud teˇce, je to HIGH, pokud ne, tak LOW. 1 2
digitalWrite(13, HIGH); digitalWrite(12, LOW);
30
11.3
ˇ Cten´ ı vstupu
Ke zjiˇstˇen´ı, zda proud do vstupu teˇce, nebo ne se pouˇz´ıv´a funkce digitalRead(). Ta, narozd´ıl od pˇredchoz´ıch dvou funkc´ı, potˇrebuje pouze jeden parametr, kter´ ym je ˇc´ıslo pinu. Tato funkce nav´ıc vrac´ı hodnotu. Kdyˇz proud teˇce, vr´ at´ı hodnotu HIGH, kdyˇz ne, tak LOW. 1 2 3 4 5
int cteni; byte vstup = 13; cteni = digitalRead(vstup); //pokud proud tece, do promenne cteni se ulozi hodnota HIGH //pokud ne, tak LOW
31
Kapitola 12
Pˇ r´ıklad: Tlaˇ c´ıtko a LED dioda Uk´ aˇzeme si program, kter´ y bude zjiˇst’ovat, jestli je stisknut´e tlaˇc´ıtko. Pokud bude, rozsv´ıt´ı se LED dioda. K t´eto uk´ azce budeme potˇrebovat: 1. Desku Arduino 2. PC 3. Nep´ ajiv´e kontaktn´ı pole s vodiˇci 4. Tlaˇc´ıtko 5. 10K ohm resistor 6. LED diodu Vˇse zapoj´ıme podle sch´ematu. Pot´e nahrajeme do Arduina uveden´ y program.
Obr´ azek 12.1: Zapojen´ı tlaˇc´ıtka a LED diody
32
1 2 3 4 5 6 7 8 9 10 11
int cteni; int led = 6; int tlacitko = 12; void setup() { pinMode(led, OUTPUT); pinMode(tlacitko, INPUT); }
void loop() { cteni = digitalRead(tlacitko); 12 digitalWrite(led, cteni); 13 } Na z´ avˇer je nutno dodat, ˇze pokud program nefunguje, nejˇcastˇejˇs´ı chybou je chybˇej´ıc´ı stˇredn´ık na konci ˇra ´dku. Pokud tedy IDE nap´ıˇse nˇejakou chybovou hl´ aˇsku, zkontrolujte stˇredn´ıky. Ty se p´ıˇs´ı na konec ˇr´ adku za: deklarac´ı promˇenn´e, za pˇriˇrazen´ım hodnoty promˇenn´e a za vol´ an´ım funkce (pinMode. . . ).
33
ˇ ast IV C´
Pokroˇ cilejˇ s´ı struktury jazyka Wiring
34
V tomto d´ıle nav´ aˇzeme na informace z minula a uk´aˇzeme si dalˇs´ı moˇznosti jazyka Wiring. Na zaˇc´atku si ˇrekneme, co jsou to konstanty a jak je pouˇz´ıvat. Pot´e si uk´aˇzeme, jak pracovat s analogov´ ym vstupem a v´ ystupem, pomoc´ı nˇehoˇz se daj´ı z´ısk´ avat data z r˚ uzn´ ych analogov´ ych senzor˚ u. Nakonec se dostaneme k velmi d˚ uleˇzit´e souˇc´ asti jak´ehokoliv programovac´ıho jazyka, kterou jsou podm´ınky.
35
Kapitola 13
Konstanty Konstanty si m˚ uˇzeme pˇredstavit jako promˇenn´e, kter´e maj´ı pˇrednastavenou hodnotu, definovanou tv˚ urci Arduina. Maj´ı za u ´kol zpˇrehlednit pr´ aci a pˇribl´ıˇzit k´od lidsk´emu jazyku. My jsme s nˇekter´ ymi z nich pracovali jiˇz v minul´em d´ılu. M˚ uˇzeme je rozdˇelit do tˇr´ı skupin.
13.1
Logick´ e konstanty
Jsou pouze dvˇe hodnoty, a to pravda a nepravda. V programov´an´ı jim odpov´ıdaj´ı konstanty true a false. Pouˇz´ıvaj´ı se tam, kde je tˇreba rozhodovat pouze mezi dvˇema stavy. • false – Konstanta false m´ a hodnotu 0. • true – U konstanty true je situace trochu komplikovanˇejˇs´ı. Mohlo by se zd´at, ˇze m´a hodnotu 1, ale nen´ı to u ´plnˇe pˇresn´e. Pˇri logick´ ych operac´ıch totiˇz jazyk Wiring vn´ım´a jak´ekoliv nenulov´e ˇc´ıslo typu integer jako true.
13.2
Typ digit´ aln´ıho pinu
V minul´em d´ıle jsme pˇri urˇcov´ an´ı, zda se bude pin chovat jako vstup, nebo jako v´ ystup, pouˇz´ıvali ve funkci pinMode() dvˇe konstanty – OUTPUT a INPUT. Dnes si k nim pˇrid´ame jeˇstˇe tˇret´ı moˇznost INPUT PULLUP. • OUTPUT – Pˇri pouˇzit´ı t´eto konstanty je pin nastaven jako v´ ystup. Ten snese proud do 40 mA. Pˇri stavu HIGH tedy tento v´ ystup m˚ uˇze poskytnout proud do 40 mA a pˇri stavu LOW m˚ uˇze stejnˇe velk´ y proud pˇrijmout. • INPUT – Nastav´ı pin jako vstup. Ten se pouˇz´ıv´a ke ˇcten´ı hodnot z digit´aln´ıch senzor˚ u (nejjednoduˇsˇs´ı jsou tlaˇc´ıtka), ale i ke komunikaci. Pouˇzit´ı s tlaˇc´ıtkem jsme si uk´azali v minul´em d´ılu. V jeho zapojen´ı si vˇsimnˇeme, ˇze je tento pin st´ale pˇripojen ke GND pˇres 10k ohm resistor. Pˇri nezm´ aˇcknut´em tlaˇc´ıtku je tedy v´ ysledek funkce digitalRead() hodnota LOW. Po zm´aˇcknut´ı tlaˇc´ıtka dojde k pˇripojen´ı k +5V a zmˇeny hodnoty funkce na HIGH. 36
• INPUT PULLUP – Funguje podobnˇe, jako INPUT. Rozd´ıl je v tom, ˇze dojde k pˇripojen´ı intern´ıho rezistoru. Ten je uvnitˇr ˇcipu zapojen mezi digit´aln´ım vstupem a +5V. V´ ychoz´ı hodnota funkce digitalRead() je tedy HIGH. Kdyˇz chceme hodnotu zmˇenit, mus´ıme vstup pˇripojit na GND. Pˇri pouˇzit´ı pˇr´ıkladu s tlaˇc´ıtkem m´ a tedy funkce hodnotu HIGH, kdyˇz je tlaˇc´ıtko uvolnˇeno a LOW, kdyˇz je zm´ aˇcknuto.
Obr´ azek 13.1: Tlaˇc´ıtko - INPUT
Obr´ azek 13.2: Tlaˇc´ıtko – INPUT PULLUP
37
13.3
Proud na digit´ aln´ıch pinech
Jsou pouze dvˇe moˇzn´e hodnoty, jak´e m˚ uˇze m´ıt proud pˇri ˇcten´ı a z´apisu pomoc´ı funkc´ı digitalRead() a digitalWrite(). Jsou to hodnoty LOW a HIGH. • HIGH – Pˇri ˇcten´ı pomoc´ı funkce digitalRead() je vyhodnocena hodnota napˇet´ı jako HIGH, pokud je vˇetˇs´ı neˇz 3V. Kdyˇz pouˇzijeme funkci digitalWrite(pin, HIGH), na v´ ystupu bude pr´avˇe 5V. • LOW – Pˇri ˇcten´ı je stav napˇet´ı vyhodnocen jako LOW, pokud je jeho velikost menˇs´ı neˇz 2V. Pˇri z´ apisu je hodnota 0V. Fakticky ale m˚ uˇze ”pˇrijmout”napˇet´ı do velikosti 5V (coˇz nelze, pokud je nastaveno HIGH).
38
Kapitola 14
Analogov´ y vstup a v´ ystup S digit´ aln´ım vstupem a v´ ystupem jsme se setkali uˇz v pˇredchoz´ı ˇc´asti. Co kdyˇz ale potˇrebujeme pracovat i s analogov´ ymi hodnotami? Na to m´ a Arduino ve v´ ybavˇe uˇziteˇcn´e funkce. Ke ˇcten´ı a z´apisu se zde pouˇz´ıvaj´ı funkce analogRead() a analogWrite(). Ty jsou vˇsak limitov´any pro pouˇzit´ı pouze na urˇcen´ ych pinech. Pojd’me si je postupnˇe pˇredstavit.
14.1
analogWrite()
Jak uˇz z n´ azvu vypl´ yv´ a, jedn´ a se o funkci slouˇz´ıc´ı k nastaven´ı ”analogov´e”hodnoty na pinu. M˚ uˇzeme ji pouˇz´ıt pouze na pinech oznaˇcen´ ych PWM (u Arduina UNO jsou to piny: 3, 5, 6, 9, 10, 11). Pouˇz´ıv´ a se u n´ı syntaxe digitalWrite(ˇc´ıslo pinu, hodnota), kdy hodnota m˚ uˇze b´ yt v rozsahu 0 aˇz 255. Slovo analogov´e jsem dal do uvozovek, protoˇze se ve skuteˇcnosti o ˇz´adn´e analogov´e hodnoty nejedn´a. Pokud bychom chtˇeli skuteˇcnˇe analogovou hodnotu v rozsahu napˇr´ıklad 0-5V, museli bychom pouˇz´ıt extern´ı D/A pˇrevodn´ık. Tato funkce totiˇz na vybran´ ych pinech generuje PWM sign´al, coˇz je jak´asi digit´aln´ı ”n´ ahraˇzka”analogov´eho sign´ alu. Ta v praxi funguje tak, ˇze rychle stˇr´ıd´a 0 a 5V. To se projev´ı sn´ıˇzenou ”´ uˇcinnost´ı”. LED sv´ıt´ı slabˇeji (ve skuteˇcnosti rychle blik´a a stˇr´ıd´a pouze dva stavy napˇet´ı a sn´ıˇzen´ a intenzita je zp˚ usobena setrvaˇcnost´ı oka), motor se toˇc´ı pomaleji atd. Podle pomˇeru ˇcasu, ve kter´em je na v´ ystupu +5V ku stavu 0V se pak odv´ıj´ı intenzita sv´ıcen´ı LED diody a podobnˇe. Pˇri vol´an´ı funkce analogWrite(pin, 127) je tedy pˇribliˇznˇe 50% ˇcasu nastaveno napˇet´ı +5V a 50% ˇcasu 0V. Pr˚ ubˇeh napˇet´ı pˇri r˚ uzn´ ych hodnot´ ach m˚ uˇzete vidˇet na obr´azku.
Obr´ azek 14.1: Graf PWM modulace
39
14.2
analogRead()
Funkce analogRead() slouˇz´ı ke ˇcten´ı analogov´e hodnoty na vstupech k tomu urˇcen´ ym. Jsou to tedy piny ˇ ı analogov´ oznaˇcen´e p´ısmenem A (napˇr´ıklad A2). Cten´ ych hodnot je uˇziteˇcn´e u r˚ uzn´ ych senzor˚ u (teplota, vlhkost atd.). Vˇetˇsina desek Arduina m´ a rozliˇsen´ı 10 bit˚ u, coˇz odpov´ıd´a hodnot´am od 0 do 1023. Napˇr´ıklad u Arduino DUE se ale m˚ uˇzeme setkat aˇz s 12-bitov´ ym rozliˇsen´ım. Zde se d´a nastavit poˇzadovan´e rozliˇsen´ı pomoc´ı funkce analogReadResolution(). My se ale budeme zab´ yvat obyˇcejn´ ym Arduinem. Syntaxe je jednoduch´ a: promˇenn´ a = analogRead(pin). Nejjednoduˇsˇs´ım pˇr´ıkladem pouˇzit´ı je mˇeˇren´ı hodnot na potenciometru. Pokud bychom chtˇeli mˇeˇrit napˇr´ıklad stav fotoresistoru, museli bychom ho zapojit do dˇeliˇce napˇet´ı s vhodn´ ym resistorem. Pouˇzit´ı obou analogov´ ych funkc´ı si uk´aˇzeme na zapojen´ı s LED diodou a potenciometrem.
40
Kapitola 15
Pˇ r´ıklad: Regulace jasu LED Jako pˇr´ıklad si uk´ aˇzeme zapojen´ı, ve kter´em budeme regulovat jas LED diody pomoc´ı potenciometru. Budeme potˇrebovat: 1. Deska Arduino 2. Nep´ ajiv´e kontaktn´ı pole s vodiˇci 3. LED dioda 4. potenciometr 5. 330 ohm resistor Na trhu nalezneme celou ˇradu potenciometr˚ u. Nejˇcastˇeji se pouˇz´ıvaj´ı ty s odporem kolem 10k ohm s line´ arn´ım pr˚ ubˇehem (znaˇceno B10K). Pokud m´ame vˇsechny komponenty pˇripraven´e, m˚ uˇzeme je zapojit podle n´ asleduj´ıc´ıho sch´ematu.
Obr´ azek 15.1: LED a potenciometr
41
V programu si mus´ıme d´ at pozor na hodnoty, se kter´ ymi funkce pracuj´ı. Z funkce analogRead() vych´ az´ı hodnoty 0 aˇz 1023, kdeˇzto analogWrite() ˇcek´a na rozsah hodnot 0 aˇz 255. Mus´ıme tedy zajistit pˇrevod hodnot. To je v tomto pˇr´ıpadˇe jednoduch´e, protoˇze 256 (28 ) se vejde do 1024 (21 0) ˇctyˇrikr´at. Nejjednoduˇsˇs´ım zp˚ usobem je tedy vydˇelen´ı hodnot z analogRead() ˇctyˇrmi (Existuje i elegantnˇejˇs´ı zp˚ usob pˇrevodu hodnot, o kter´em si pov´ıme d´ ale). K´ od tohoto pˇr´ıkladu bude tak´e velmi jednoduch´ y. Mˇeˇren´ı budeme prov´adˇet v tˇele funkce loop(). 1 2 3 4 5 6 7 8 9 10 11 12 13 14
byte led = 6; //pin s LED diodou byte pot = A0; //pin s pripojenym potenciometrem int val; //promenna pripravena k uchovani hodnot void setup() { //sem nic nepiseme
} void loop() { val = analogRead(pot)/4; //cteni hodnoty na A0 a uprava rozsahu
analogWrite(led, val); //generovani PWM
}
42
Kapitola 16
Podm´ınky Pokud chceme, aby se urˇcit´ a ˇc´ ast k´ odu provedla pouze v urˇcit´ ych pˇr´ıpadech, pˇrich´azej´ı na ˇradu podm´ınky. Existuj´ı tˇri z´ akladn´ı struktury, kter´e rozdˇeluj´ı program podle zadan´ ych podm´ınek. V lidsk´e ˇreˇci by se daly vyj´ adˇrit jako: 1. Pokud plat´ı podm´ınka, udˇelej to a to. 2. Pokud plat´ı podm´ınka, udˇelej to a to. Pokud neplat´ı, udˇelej to a to. 3. Pokud je hodnota promˇenn´e xy, udˇelej to a to. Pokud je yz, udˇelej to a to... Neˇz se vˇsak pust´ıme do psan´ı podm´ınek, mus´ıme se pod´ıvat na zp˚ usob, jak´ ym se daj´ı v jazyce Wiring zad´ avat.
16.1
Porovn´ avac´ı oper´ atory
Porovn´ avac´ı oper´ atory slouˇz´ı k z´ apisu podm´ınek. Jedn´a se o syst´em znaˇcek, kter´e jsou pro poˇc´ıtaˇc srozumiteln´e. V´ ysledkem porovn´ avac´ı operace je logick´a hodnota true, nebo false. Rozliˇsujeme ˇsest oper´ator˚ u. • A == B – A je rovno B – Vr´ at´ı hodnotu true, pokud A m´a stejnou hodnotu, jako B. • A != B – A nen´ı rovno B – Vr´ at´ı hodnotu true, pokud m´ a A jinou hodnotu neˇz B. • A
B – A je vˇetˇs´ı neˇz B – Vr´ at´ı true, pokud je A vˇetˇs´ı neˇz B. • A <= B – A je menˇs´ı nebo rovno B – Vr´ at´ı true, pokud je A menˇs´ı nebo rovno B. • A >= B – A je vˇetˇs´ı nebo rovno B – Vr´ at´ı true, pokud je A vˇetˇs´ı nebo rovno B.
43
10 10 10 10 10 6 10 1 2 3 4 5
== 5 //neni pravda != 5 //je pravda < 5 //neni pravda > 5 //je pravda <= 5 //neni pravda >= 5 //je pravda
16.2
Sloˇ zen´ e podm´ınky
Nˇekdy dospˇejeme do situace, ve kter´e je potˇreba pracovat s nˇejakou sloˇzitˇejˇs´ı podm´ınkou. K tomuto u ´ˇcelu slouˇz´ı tzv. logick´e oper´ atory. M˚ uˇzeme si je pˇredstavit jako definici vztahu mezi v´ıce porovn´avac´ımi oper´ atory. • X && Y – a (konjunkce) – V´ ysledkem je true pouze v pˇr´ıpadˇe, kdyˇz jsou true X i Y. • X —— Y – nebo (disjunkce) – V´ ysledkem je true v pˇr´ıpadˇe, kdy je alespoˇ n jedna z X a Y true. • !X – negace – V´ ysledkem je true, pokud je X false a naopak.
1 2 3
(1 == 2) \&\& (2 == 2) //false (1 == 1) \&\& (2 == 2) //true
4 5 6 7 8 9
(1 (1 (2 (2
10 11
== == == ==
2) 2) 2) 2)
|| || || ||
(2 (2 (2 (3
== == == ==
3) 2) 3) 3)
//false //true //true //true
!(1 == 1) //false !(1 == 2) //true !(false) //true
44
16.3
if()
Ve vˇetˇsinˇe programovac´ıch jazyk˚ u se pro z´apis podm´ınek pouˇz´ıv´a slovo if. V jazyce Wiring je moˇzn´e pouˇz´ıt nˇekolik zp˚ usob˚ u z´ apisu. Ty ale vˇzdy zaˇc´ınaj´ı: if(podm´ınka). 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
//podminky s jednim prikazem
if(x > 120) digitalWrite(LEDpin, HIGH); if(x > 120) digitalWrite(LEDpin, HIGH); if(x > 120){ digitalWrite(LEDpin, HIGH); } //podminky s vice prikazy − je nutne pouzit slozene zavorky
if(x > 120){ digitalWrite(LEDpin1, HIGH); digitalWrite(LEDpin2, HIGH); ... }
16.4
else if()
Pokud chceme do podm´ınky pˇridat v´ıce moˇznost´ı, pouˇz´ıv´a se z´apis else if(). 1 2
if (A < 800){
3 4 5 6
} else if ((A < 500) && (A > 200)){
//prikazy
//prikazy
}
16.5
else
K ˇc´ asti else se nep´ıˇs´ı dalˇs´ı podm´ınky. Slouˇz´ı k urˇcen´ı pˇr´ıkaz˚ u, kter´e se provedou, pokud ani jedna z pˇredchoz´ıch podm´ınek nen´ı splnˇena. 1 2 3 4 5 6 7 8 9
if (A < 800){ //prikazy
} else if ((A < 500) && (A > 200)){ //prikazy
} else{ //prikazy
}
45
16.6
Switch
Switch je speci´ aln´ı druh podm´ınky. Speci´ aln´ı je v tom, ˇze se zab´ yv´a pouze promˇennou a jej´ı hodnotou. Program proch´ az´ı kaˇzdou vˇetev konstrukce switch a testuje hodnotu promˇenn´e. Dalˇs´ı rozd´ıl je v tom, ˇze se m˚ uˇze prov´est i v´ıce vˇetv´ı (coˇz u if nelze). Pokud ale chceme, aby po proveden´ı vˇetve program pokraˇcoval aˇz za koncem konstrukce switch, mus´ıme pouˇz´ıt na konci vˇetve pˇr´ıkaz break; Syntaxe je n´ asleduj´ıc´ı: 1 2 3 4 5 6 7 8 9 10 11
switch (promenna){ case 1: //pokud je hodnota promenne 1, provede se tato cast kodu break; //po provedeni teto casti konstrukce switch konci
case 2: //pokud je hodnota promenne 2, provede se tato cast kodu
break; default: /∗ pokud se hodnota promenne nerovna zadne z nabizenych moznosti, provede se tato cast ∗/
}
46
Kapitola 17
Pˇ r´ıklad: P´ as LED diod Na z´ avˇer kapitoly si trochu pohrajeme s podm´ınkami. Vytvoˇr´ıme aplikaci, kter´a bude ˇc´ıst hodnotu z potenciometru a podle n´ı vybere led diodu. K tomuto pˇr´ıkladu budeme potˇrebovat stejn´e vybaven´ı, jako u toho minul´eho, jen s vˇetˇs´ım poˇctem LED diod a resistor˚ u. Pro pˇredv´adˇec´ı u ´ˇcely jsem zvolil pˇet diod.
ˇ Obr´ azek 17.1: Rada LED a potenciometr K´ od vyhodnocuj´ıc´ı data z potenciometru by mohl vypadat n´asledovnˇe.
47
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
byte led[] = {0,1,2,3,4}; //pole s piny pripojenych LED diod byte pot = A0; int val; void setup() { pinMode(led[0], pinMode(led[1], pinMode(led[2], pinMode(led[3], pinMode(led[4], }
void loop() { val = analogRead(pot); if(val > 800){ digitalWrite(led[0],HIGH); } else if(val > 600){ digitalWrite(led[1],HIGH); } else if(val > 400){ digitalWrite(led[2],HIGH); } else if(val > 200){ digitalWrite(led[3],HIGH); } else{ digitalWrite(led[4],HIGH); }
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
OUTPUT); OUTPUT); OUTPUT); OUTPUT); OUTPUT);
delay(250); digitalWrite(led[0],LOW); digitalWrite(led[1],LOW); digitalWrite(led[2],LOW); digitalWrite(led[3],LOW); digitalWrite(led[4],LOW); } Kdyˇz se nyn´ı pod´ıv´ ate na k´ od, jsou zde vidˇet opakov´an´ı, ve kter´ ych se mˇen´ı pouze jedno ˇc´ıslo. Jak si v takov´ ychto pˇr´ıpadech ulehˇcit pr´ aci si uk´ aˇzeme d´ale.
48