Letní IoT: Den 1

Z MiS
(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
Řádka 157: Řádka 157:
 
  Serial.println(cislo); - vypíše proměnou číslo a udělá nový řádek (následující výpis bude na novém řádku)
 
  Serial.println(cislo); - vypíše proměnou číslo a udělá nový řádek (následující výpis bude na novém řádku)
  
= Cykly =
+
= Závěrečné opakování =
 
+
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á
+
 
+
 
+
= 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 =
+
 
+
[http://jurasek.wz.cz/index.php/iot1/15-ovladani-pres-tlacitko Tlačítko]
+

Verze z 13. 7. 2020, 17:43


Obsah

Úvod

Co je to IoT

začínáme s IoT Jak udělat z "blbé" věci tu "chytrou"

Základy elektrotechniky

Používáme zde USB napájení - tedy 5V - GPIO piny poskytují 3.3V (3V3). Než cokoliv zapojíte, tak si dobře zkontrolujte Základy elektrotechniky

Samostatné úkoly

POZOR, NEŽ ZAPNEŠ NAPÁJENÍ, ZAVOLEJ LEKTORA, ABY TI TO ZKONTROLOVAL

  1. Obvod s LEDkou (3V3 - rezistor - LEDka - GND)
  2. Obvod 2 LEDky sériově za sebou
  3. Obvod 2 LEDky paralelně
  4. Obvod LEDka s tlačítkem

Vývojové prostředí

Instalace a nastavení desky

Základní seznámení

Při vytvoření nového souboru tam máte dvě metody.

//zde se definují proměnné, importují knihovny, apod:

void setup() {
 // put your setup code here, to run once:
 // zde napište to, co se má spustit na začátku:
}

void loop() {
 // put your main code here, to run repeatedly:
 // zde napište to, co má běžet pořád dokola:
}


LEDka

Jako první věc si zkusíme rozsvítit a zhasnout LEDku.

Budeme potřebovat: Vývojovou desku, USB kabel, nepájivé pole, 2 LEDky (červenou a modrou), 5 káblíků, 2 rezistory

//obrázek//

[1]

//popis zapojení//

#define nazev číslo GPIO pinu;

Wemos pinout

takže my budeme mít....

#define modra 18;
#define cervena 17;

Toto dáme úplně na začátek dokumentu

Toto je ale jen jeden ze způsobů, můžete se setkat i s

#define modra 5;
#define modra D1;
const char modra = 5;
char modra 5;
int modra = D1;
const char modra = 5;

Způsobů zápisu je více, každý má své výhody i nevýhody - #define zabírá méně místa, Dněco vidíte na desce...

v void setup() musíme říct, že je to výstupní

pinMode(modra, OUTPUT);
pinMode(cervena, OUTPUT);

a teď nám jen rozsvítit a zhasnout LEDku

k tomu používáme metodu "digitalWrite(název, HIGH - zapnuto / LOW - vypnuto);"

digitalWrite(modra, HIGH); - modrá LEDka se rozsvítí
digitalWrite(modra, LOW); - modrá LEDka zhasne

jelikož tyto věci trvají velmi krátkou dobu - lidské oko si toho nevšimne, dáme tam nějakou prodlevu k tomu se využívá delay(čas v milisekundách);

takže si kód doplníme o 2s prodlevy

digitalWrite(modra, HIGH);
delay(2000);
digitalWrite(modra, LOW);
delay(2000);

Samostatný úkol

Každá LEDka musí být zapojena zvlášť.

  1. modrá i červená LEDka se rožne na 3 s a pak 3 s nebudou svítit
  2. modrá ledka se rozsvítí na 4 s, pak zhasne a zároveň se rozsvítí červená ledka, ta zhasne po 4s a znovu se rozsvítí modrá
  3. modrá LEDka bude svítit 5 sekund a dvě a půl svítit nebude


Proměnné

Obecně

Jsou různé datové typy, my budeme využívat nejvíce:

Práce s intem

int cislo; definuji proměnnou s názvem číslo
ins cislo = 6; definuji proměnnou s názvem číslo a dám ji číslo 6
cislo = 8; proměnné cislo dám číslo 8
cislo++; proměnná cislo se zvýší o 1
cislo--; proměnná cislo se sníží o 1
delay(cislo); počká to tolik, kolik je to číslo (když 1000 - tak sekundu)
delay(2 * cislo); počká to dvojnásobek

Práce s booleanem

boolean je datový typ, který má 2 stavy, 0 / 1, ne / ano, false / true

boolean splneno = true;
boolean splneno = false;
spleno = true;
spleno = false
spleno = !splneno; //nastaví se to na opak

Proměnná v delay

V některých případech máme prodlevu vždy stejnou a opakuje se nám tam vícekrát - když se rozhodneme, že ji změníme, tak to musíme celé přepisovat. To je vcelku nepraktické, co?... Takže využijeme proměnné. Chceme, aby se proměnná jmenovala prodleva a byla na 2 sekudny - tj. 2000 ms.

int prodleva = 2000;

Samostatný úkol

  1. Předělej úkoly na ledky za použití proměnné v delay();
  2. LEDka se rozsvítí na 1 s, 1 s nebude svítit, LEDka se rozsvítí na 2 s, 2 s nebude svítit, LEDka se rozsvítí na 3 s ... a tak dále

Sériový výstup

Inicializuju sériovou komunikaci - zvolím si rychlost

Serial.begin(9600);

K vypsání do konzole se používá

Serial.print("Text"); - vypíše text v uvozovkách
Serial.println(cislo); - vypíše proměnou číslo a udělá nový řádek (následující výpis bude na novém řádku)

Závěrečné opakování

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