Letní IoT: Den 2

Z MiS
Přejít na: navigace, hledání


Obsah

Opakování

Na začátek si zopakujeme věci, co jsme dělali včera

  1. Blikání ledky v 2s prodlevou
  2. Vypsat (do konzole) všechny sudá čísla do 50
  3. 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

  1. Vypište (Serial.println()) čísla od 0 do 10 (se sekundovou prodlevou)
  2. LEDka blikne (rozsvítí se na sekundu a pak zhasne na sekundu) a pak 3 sekundy nesvítí, 2 × blikne, 3 ... 10 × blikne
  3. 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);

Regulace jasu

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

  1. LEDka s postupně rozsvítí a pak postupně zhasne
  2. 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á
  3. LEDka 5× blikne (5s) a pak 3 s počká (for cyklus)
    1. 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()?

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

  1. Vytvoř metodu, co na 3 s rozsvítí ledku.
  2. Vytvoř metodu, co 10× vypíše "blik"
  3. Vytvoř metodu, co 3× vypíše zadané slovo a zabliká při tom


Tlačítko

Tlačítko

Samostatné úkoly

  1. Když se zmačkne tlačítko, rozsvítí se modrá LEDka za 3 sekundy
  2. Ž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)"

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

  1. zelená barva
  2. bílá barva
  3. Vaše oblíbená barva
  4. č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!

  1. 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í

prozkoumejte!

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

  1. Napište na display své jméno
  2. Napište na display své jméno a pod to "Hrajeme si s IoT"
  3. 5 sekund bude na displeji Vaše jméno a dalších 5 s tam bude "Hrajeme si s IoT"
  4. Prozkoumejte projekty knihovny (Soubor -> Příklady ->

Sériový vstup

Sériový IO

RGB led

Osobní nástroje
Jmenné prostory
Varianty
Akce
Výuka
Navigace
Nástroje