Letní IoT: Den 2
(→Display) |
(→Cykly) |
||
Řádka 11: | Řádka 11: | ||
= Cykly = | = Cykly = | ||
+ | |||
+ | [[ Letní IoT : Cykly ]] | ||
Cykly nám slouží k tomu, že se něco opakuje dokud není něco splněno... | Cykly nám slouží k tomu, že se něco opakuje dokud není něco splněno... |
Verze z 16. 8. 2020, 10:30
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 - 1023 - 1024 možností
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
- LEDka s postupně rozsvítí a pak postupně zhasne
- 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: "
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; }
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
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)"
Display
Teď si ukážeme další výstupní zařízení - display.
Aby display správně fungoval, musíme udělat tyto věci
Bacha, aby byla fajn adresa LiquidCrystal_I2C lcd(0x3F, 16, 2);
Adresa lze zjistit přes I2C_Scanner
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 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 ->