Letní IoT: Den 2
Obsah |
Opakování
Na začátek si zopakujeme věci, co jsme dělali včera
- Blikání ledky v 2s prodlevou
- Vypsat (do konzole) všechny sudá čísla do 50
- 3 LEDky, po 2 sekundách se bude střídat, která bude svítit (červená, žlutá, zelená, čer...)
Cykly
Cykly nám slouží k tomu, že se něco opakuje dokud není něco splněno...
For cyklus
for(int i = 0; i < 10; i++) { ...kód... } for(int i - proměnná i; i < 10 - dokud je i menší než 10; i++ - pokaždé se i zvýší o jedno)
buď tam dáme i < 10, nebo i <= 9 můžeme dát také
for(int i = 10; i > 1; i--) { ...kód... }
V některých případech se to může hodit
Samostatný úkol
- Vypište (Serial.println()) čísla od 0 do 10 (se sekundovou prodlevou)
- LEDka blikne (rozsvítí se na sekundu a pak zhasne na sekundu) a pak 3 sekundy nesvítí, 2 × blikne, 3 ... 10 × blikne
- LEDka se rozsvítí na sekundu, zhasne na sekundu, rozsvítí se na dvě sekundy, zhasne na dvě sekundy, rozsvítí se na 3... zhasne na 10 sekund, rozsvítí se na sekundu
LEDka
Metodu digitalWrite(); jsme si již ukázali. Ta je k rožnutí, či zhasnutí LEDky. Ale co když chceme LEDku rožnout jen částečně? ... či aby se postupně rozžíhala?
K tomu nám slouží metoda analogWrite(nazevLedky, cislo); nazevLedky - ten název, co jsme dali u #define nazevLedky 15 cislo - jak má svítit - v našem případě je to v rozmezí 0 - 1024
takže, chceme rozsvítit LEDku napůl jen - analogWrite(ledka, 512);
Příklad
LEDka se během 5ti sekund rožne.
#define ledka 15 void setup() { pinMode(ledka, OUTPUT); } void loop() { for(int i = 0; i < 1024; i++) { analogWrite(ledka, i); delay(5); } }
Samostatný úkol
- Během pěti sekund se LEDka rožne, sekundu zůstane rožnutá na maximum, 5 sekund se bude zhasínat a sekundu zůstane zhasnutá
- LEDka 5× blikne (5s) a pak 3 s počká (for cyklus)
- Při každém bliknutí se vypíše do konzole "Bliknutí číslo: "
- LEDka s postupně rozsvítí a pak postupně zhasne
Podmínka
if(jeSplneno) { toto se provede, pokud je podmínka splněna } else { toto se provede, když podmínka není splněna }
Co může být v if()?
- boolean
- if(spleno) { Serial.print("splneno"); } else { Serial.print("nesplneno"); }
- int
- if(teplota > 20) { ... rozsviť LEDku; }
Tlačítko
Samostatné úkoly
- Když se zmačkne tlačítko, rozsvítí se modrá LEDka za 3 sekundy
- Žlutá dioda stále svítí, když zmáčkneme tlačítko, tak se zhasne a do konzole se vypíše "Zmáčkl si tlačítko po (číslo)"
Vlastní metoda
Již známe 2 metody void setup() a void loop() My se teď naučíme vytvořit si vlastní metodu.
Metoda se skládá z návratového typu, názvu metody a v závorkách má parametry.
My nepotřebujeme, aby nám metoda něco vracela, tak použijeme void
void blikni() { digitalWrite(ledka, HIGH); delay(500) digitalWrite(ledka, LOW); }
a teď stačí napsat
blikni();
a provede se to, co je v té metodě... paráda, co? :D
Metodě můžeme dát parametr - počet bliknutí třeba
void blikni(int pocet) { for(int i = 0, i < pocet; i++) { digitalWrite(ledka, HIGH); delay(500) digitalWrite(ledka, LOW); delay(500); } }
Co udělá tento příkaz? (vyzkošej!)
blikni(5);
Samostatný úkol
- Vytvoř metodu, co na 3 s rozsvítí ledku.
- Vytvoř metodu, co 10× vypíše "blik"
- Vytvoř metodu, co 3× vypíše zadané slovo a zabliká při tom
RGB LEDka
Popis
RGB LEDka má v sobě jakoby 3 LEDky - Red, Green, Blue Má 3 katody (+) a jednu anodu (-) [schéma]
Abychom ji mohli rozsvítit do námi požadované barvy, musíme něco vědět o [RGB mobelu] Teoreticky je 16milionů 255natřetí možných kombinací, jak může svítit.
Budeme chtít zelenou - tak přivedeme napětí ke katodě která je spojena přechodem pn emitujícím zelené světlo.
Zapojení
GPIO pin - rezistor - katoda
Příklady
#define red ... #define gre ... #fefine blu ... Chceme čevenou digitalWrite(red, HIGH); Chceme žlutou digitalWrite(red, HIGH); digitalWrite(gre, HIGH);
Samostatný úkol
- zelená barva
- bílá barva
- Vaše oblíbená barva
- černá barva
Moc kombinací není, co?
Příklady 2
Metodu analogWrite() již znáne,
Pomocí ní můžeme dát RGB diodě jakoukoliv barvu.
Víme, že RGB model je 0 - 255 a že metoda analogWrite() má rozsah 0 - 1023
Samostatný úkol 2
Tak hurá do práce, zkuste!
- Zkuste použít tento kód - není přímo na naše zařízení, upravte si ho :D
Display
Teď si ukážeme další výstupní zařízení - display.
Aby display správně fungoval, musíme udělat tyto věci
importovat knihovny #include <Wire.h> #include <LiquidCrystal_I2C.h> nastavit velikost displeje LiquidCrystal_I2C lcd(0x27, 16, 2); ve void setup() lcd.begin();
A to je vše!
A teď si ukážeme pár metod pro práci s displejem
lcd.backlight(); - rožne se podsvícení lcd.noBacklight(); - zhasne se podsvícení lcd.print(); - napíše na display (pokračuje na aktuálním řádku) lcd.printl(); - napíše na nový řádek displeje lcd.clear(); - smaže vše z displeje lcd.setCursor(0, 1); - nastaví kurzor na (znak, řádek)
Zapojení
Tento display komunikuje přes I2C a na napájení má 5V.
Zkuste to zapojit sami a pak zavolejte lektora na zkontrolování.
Aby Vám to fungovalo, musíte mít knihovnu v počítači.
Samostatný úkol
- Napište na display své jméno
- Napište na display své jméno a pod to "Hrajeme si s IoT"
- 5 sekund bude na displeji Vaše jméno a dalších 5 s tam bude "Hrajeme si s IoT"
- Prozkoumejte projekty knihovny (Soubor -> Příklady ->