Datové typy proměnných Flashcards
Proměnné
Proměnná je místo, ve kterém se dají uchovávat data. Každá proměnná má vlastní jméno, datový typ a hodnotu. Často se používají například tam, kde se v programu dokola opakují ty samé hodnoty.
Vytvořit proměnnou ale nemůžeme jen tak někde. Když budeme chtít používat danou proměnnou všude v programu, musíme ji vytvořit vně všech funkcí (tedy i mimo funkce setup a loop). Pokud nám stačí používat proměnnou uvnitř jedné funkce a nikde jinde ji nepotřebujeme, stačí, když ji deklarujeme uvnitř funkce.
každá proměnná má svůj datový typ. Ten nám říká, jaká data můžeme v proměnné najít. Může se jednat o logické hodnoty (true/false), znaky, nebo čísla.
Typy proměnných
Byte, Integer, Float, Long, Boolean, Char
Byte
Proměnná datového typu byte má velikost 8 bitů a slouží
k uchování celých čísel. Její rozsah je 28 hodnot - 0 až 255
Integer
Slouží k ukládání celých čísel. U desek s procesory Atmega (tedy naprostá většina) uchovává 16-bit hodnotu - tedy od -32,768 do 32,767.
Long
Slouží k uchování celočíselných 32 bitových hodnot od -2,147,483,648 do 2,147,483,647.
Float
Tento datový typ je určený pro uchování čísel s desetinnou čárkou s přesností na 7 desetinných míst. Jeho velikost je 32 bitů. Můžeme v něm ukládat hodnoty od -3,4028235 * 10³⁸ do 3,4028235 * 10³⁸.
Char
Tento datový typ slouží k uchování jednoho znaku textu. Znak je zde uchován jako jeho číselná hodnota v ASCII tabulce znaků. Písmena, slova i věty se píšou v uvozovkách. K uchování řetězců textu slouží typ string, kterým se budeme zabývat za chvíli.
Pokud chceme používat bezznaménkovou variantu, musíme před jméno datového typu přidat slovo unsigned. Pokud bychom chtěli uvést znaménkovou variantu, můžeme před číslo zapsat signed. Je to ale zbytečné, protože jsou tyto typy znaménkové ve výchozím stavu.
Desetinná čísla, architektura
Je také potřeba si uvědomit, že práce s desetinnými čísly není přesná. Nebudeme zbytečně zabíhat do detailů, pamatujte si ale, že výraz 8,0 2,0 nám nemusí vrátit výsledek 4,0. Kvůli zaokrouhlování během výpočtu se může stát, že výsledek bude třeba 3,99987. Kdykoliv jde použít celočíselný datový typ, použijte raději ten a typům jako float a double se vyhněte.
Jazyk C striktně nespecifikuje velikost základních datových typu, vše záleží na použité architektuře. Například datový typ int má na AVR velikost 16 bitů, ale pro rodinu ARM nebo x86 je to 32 bitů. V případě jiných architektur to může být ještě jinak.
Pole
Pole (anglicky array) je speciální typ proměnné. Umožňuje shromáždit více hodnot do jedné proměnné. Můžete si jej představit, jako krabičku, která má jednotlivé přihrádky očíslované. Když víme, jakou krabičku používáme a do jaké přihrádky se chceme podívat, můžeme se dostat k požadované hodnotě. V programátorské terminologii se číslům přihrádek říká index.
Jejich deklarace je podobná, jako u proměnných – každé pole má datový typ hodnot, které v něm najdeme, jméno, hodnoty, a navíc i velikost pole.
Ve většině programovacích jazyků jsou indexy v poli číslovány od nuly. Prvek na prvním místě má tedy index 0. Čtení hodnoty prvku pole poté probíhá stejně, jako u proměnných, jen musíme připojit ještě jeho index.
Konstanty
Konstanty si můžeme představit jako proměnné, které mají přednastavenou hodnotu, definovanou tvůrci Arduina. Mají za úkol zpřehlednit práci a přiblížit kód lidskému jazyku. Můžeme je rozdělit do tří skupin.
- Logické konstanty
- Typ digitálního pinu
- Hodnota proudu na pinu
pinMode() dvě konstanty - OUTPUT a INPUT nebo INPUT_PULLUP
- OUTPUT Při stavu HIGH výstup poskytne max I=40 mA Při stavu LOW může stejně velký proud přijmout
- INPUT - ke čtení hodnot z digitálních senzorů (nejjednodušší jsou tlačítka), ale i ke komunikaci. Při použití s tlačítkem si všimněme, že je tento pin stále připojen ke GND přes 10k ohm rezistor. Při nezmáčknutém tlačítku je tedy výsledek funkce digitalRead() hodnota LOW. Po zmáčknutí tlačítka dojde k připojení k +5 V a změny hodnoty funkce na HIGH.
-INPUT_PULLUP – podobně, jako INPUT - Rozdíl je v tom, že dojde k připojení interního rezistoru. Ten je uvnitř čipu zapojen mezi digitálním vstupem a +5V. Výchozí hodnota funkce digitalRead() je tedy HIGH. Když chceme hodnotu změnit, musíme vstup připojit na GND. Při použití příkladu s tlačítkem má tedy funkce hodnotu HIGH, když je tlačítko uvolněno a LOW, když je zmáčknuto.
Jsou pouze dvě možné hodnoty, jaké může mít proud při čtení a zápisu pomocí funkcí digitalRead() a digitalWrite(). Jsou to hodnoty LOW a HIGH.
- HIGH při čtení pomocí funkce digitalRead() je vyhodnocena hodnota napětí jako HIGH, pokud je větší než 3V. Když použijeme funkci digitalWrite(pin, HIGH), na výstupu bude právě 5V.
- LOW Při čtení je stav napětí vyhodnocen jako LOW, pokud je jeho velikost menší než 2V. Při zápisu je hodnota 0V.
Analogový vstup a výstup
Na to má Arduino ve výbavě užitečné funkce. Ke čtení a zápisu se zde používají funkce analogRead() a analogWrite(). Ty jsou však limitovány pro použití pouze na určených pinech
- analogWrite(číslo_pinu, hodnota) rozsah hodnoty 0-255
- sloužící k nastavení “analogové” hodnoty na pinu. Můžeme ji použít pouze na pinech označených PWM (u Arduina UNO jsou to piny: 3, 5, 6, 9, 10, 11)
- generuje PWM signál, což je jakási digitální “náhražka” analogového signálu.
- rychle střídá 0 a 5V
- analogWrite(pin, 127) // 50% 5 V a 50% 0V
- analogRead()
- slouží ke čtení analogové hodnoty na vstupech (A0-A5) Většina desek Arduina má rozlišení 10 bitů, což odpovídá hodnotám od 0 do 1023
- proměnná = analogRead(pin)
Z funkce analogRead() vychází hodnoty 0 až 1023, kdežto analogWrite() čeká na rozsah hodnot 0 až 255. Musíme tedy zajistit převod hodnot. To je v tomto případě jednoduché, protože 256 (28) se vejde do 1024 (210) čtyřikrát. Nejjednodušším způsobem je tedy vydělení hodnot z analogRead() čtyřmi.