Proměnné v Arduino
Při programování je velmi důležitý typ deklarovaných proměnných. Rozhoduje o správnosti kódu, stejně jako o možnostech dané proměnné a například o přesnosti výpočtů v programu, který píšeme. Tento článek představuje typy proměnných používané při programování v prostředí Arduino IDE.
Počítačové programování s proměnnými
Počítače, včetně miniaturních prototypovacích platforem, jako je např. Arduino, provádějí výpočty a logické operace pomocí procesoru. Srdcem procesoru a mikrokontroléru je aritmeticko-logická jednotka (ALU), která provádí jednoduché operace s místy v paměti, jako je sčítání, odčítání a logický součin. Aritmeticko-logická jednotka nerozpozná, co tato data představují, a to ani přes znalosti konstruktéra nebo cílového uživatele. Data, která podléhají aritmeticko-logickým operacím, jsou potřebná při provádění výpočtů s celočíselnými i plovoucími čísly.
Veškerý kontext pro tyto operace pochází z překladačeVeškerý kontext pro tyto operace pochází z překladače , přičemž kontextové nápovědy přicházejí do překladače od uživatele. Úkolem programátora je naopak říci překladači, která z hodnot převzatých pro výpočty je celé číslo a která číslo s pohyblivou řádovou čárkou. Překladač tedy musí pochopit, co máme na mysli, když chceme například sečíst dvě čísla – jedno celé a druhé s pohyblivou řádovou čárkou. V některých případech se jedná o jednoduchou operaci, zatímco v jiných nikoli. Tento zdánlivě jednoduchý proces, je složitější, než se může zdát, zejména pokud se na ně podíváme prizmatem provádění těchto výpočtů přímo člověkem na kus papíru nebo do paměti. Z tohoto důvodu zadávání číselných údajů do programu, je nutné zadat typ proměnné přiřazenou tomuto argumentu.
Arduino - typy proměnných
Typy proměnných slouží k identifikaci datových typů a s nimi spojených funkcí pro práci s daty. Jejich specifikace slouží k deklaraci funkcí a proměnných, které definují bitový vzor a paměťový prostor.
V programovacím prostředí Arduino IDE se používají následující typy proměnných, které si probereme na příkladech:
void
int
char
float
double
unsigned int
short
long
unsigned long
byte
word
Typ void
Datový typ void určuje prázdnou množinu hodnot a používá se pouze k deklaraci funkcí. Používá se jako návratový typ pro funkce, které nevracejí žádnou hodnotu. Uvažujme následující kód:
int a = 5;
void setup( )
{
. //
}
void loop ( )
{
.
.
}
Typ int
Datový typ int zahrnuje celá čísla, například 1, 27, 39, -11, -27, -46 atd. Nemají zlomkovou část (mantisu). Datový typ integer, je považován za primární datový typ pro ukládání čísel. Datová velikost typu int je dva bajty (16 bitů). Datový rozsah typu int zahrnuje čísla mezi -32768 a 32767 nebo v mocninném zápisu mezi -(215) a ((215) – 1).
V mikrokontrolérech AVR ATmega a desce Arduino UNO R3 ukládá datový typ int hodnoty o velikosti až dvou bajtů. Naproti tomu na deskách Arduino Zero a Arduino MKR1000 založených na mikrokontroléru SAMD21 a Arduino Due ukládá datový typ int hodnoty od 4 do 32 bitů. Minimální rozsah je tedy od -(231) do ((231)-1) nebo, jinak řečeno, od -2147483648 do 2147483647. Záporná čísla se ukládají jako mocniny 2 s přirozeným exponentem. Hodnota nejvyššího bitu (MSB) určuje znaménko čísla. Uvažujme následující kód:
int var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné
Například,
int a;
int b = 4;
Jakákoli proměnná nebo identifikátor proměnné se stává celočíselnou proměnnou a může uchovávat pouze celá čísla. Vezměme si následující kód:
int Suma = 0;
void setup( )
{
Serial.begin(9600);
}
void loop ( )
{
Suma++; //przy kazdym okrazeniu petli, suma jest zwiekszana o 1
Serial.println (Suma); //wyswietlanie obecnego wyniku sumy
delay(2000); //nastepne okrazenie petli za 2s
}
Typ char
Datový typ char může uchovávat libovolný počet znakových sad. Identifikátor deklarovaný jako char se stává znakovou proměnnou. Literály char se zapisují v jednoduchých uvozovkách. O typu char se často říká, že je celočíselným typem. Je to proto, že symboly, písmena atd. jsou v paměti reprezentovány přiřazenými číselnými kódy a jsou pouze celočíselné. Velikost datového typu char je minimálně osm bitů. Pro datový typ jako unsigned char s délkou osmi bitů nebo jednoho bajtu můžeme použít datový typ byte. Například písmenu “A” je podle kódování ASCII přiřazena číselná hodnota 65. Pokud tedy zadáme výraz “A” + 2, bude mít podle standardu ASCII hodnotu 67. V případě, že zadáme písmeno “A” + 2, bude mít hodnotu 67. Uvažujme kód:
char var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné
Vezměte si kód:
char mojazmienna = ' B ';
char mojazmienna = 66 ; // obie wartosci sa rowne sobie
Typ float
Číslo, které obsahuje zlomkovou a celočíselnou část, se považuje za číslo s pohyblivou řádovou čárkou. Například 3,142 je číslo s pohyblivou řádovou čárkou. Číslo 14 je celé číslo a 14,0 je číslo s pohyblivou řádovou čárkou. Z důvodu vyššího rozlišení se zlomková čísla používají k aproximaci spojitých a analogových hodnot (např. při měření elektrického napětí pomocí ADC zabudovaného v mikrokontroléru). Čísla s pohyblivou řádovou čárkou lze zapsat také ve tvaru exponentu. Čísla mohou být velká až 3,4028235E+38 a malá až -3,4028235E+38. Velikost datového typu float je tedy 4 bajty nebo 32 bitů.
Vezměte si kód:
float var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Vezměte si kód:
int x ;
int y ;
float z ;
void setup ( )
{
Serial.begin (9600);
}
void loop ( )
{
x = 3 ;
y = x/2 ; // y jest zmienna typu int i nie moze przechowywac ulamkow wiec zwroci 1
z = (float) x / 2.0 ; // z przechowuje wartosc 1.5 bo jest typu float
// to oznacza, ze musimy uzyc dzielenia przez 2.0 zamiat 2
}
Z výše uvedeného kódu je zřejmé, že i když pro výpočty s plovoucí desetinnou čárkou používáme celá čísla, měli bychom za ně doplnit desetinnou tečku a nulu. Jinak překladač pochopí, že jsme použili celá čísla, a vrátí celočíselné hodnoty. Čísla s pohyblivou řádovou čárkou lze také převést na celočíselný tvar. Uvažujme kód:
float a =4.7 ;
int b = a + 0.5 ; // program zwraca wartosc 5
Typ double
Datový typ double se používá také pro práci s desetinnými čísly nebo čísly s pohyblivou řádovou čárkou. Zabírá dvakrát více paměti než typ float. Ukládá čísla s plovoucí desetinnou čárkou s vyšší přesností a rozsahem. Typ double označuje čísla s plovoucí desetinnou čárkou s dvojnásobnou přesností a zabírá čtyři bajty na deskách ATmega a UNO a 8 bajtů na deskách Arduino Due. Uvažujme kód:
double var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Typ unsigned int
Typ unsigned int uchovává hodnotu až dvou bajtů nebo 16 bitů. Ukládá pouze kladné hodnoty. Rozsah datového typu unsigned int je 0 až 65 535 nebo 0 až ((216) – 1). Arduino Due ukládá datovou hodnotu typu unsigned o velikosti 4 bajtů nebo 32 bitů. Rozdíl mezi datovým typem unsigned a signed je ve znaménkovém bitu. V 16bitovém čísle je 15 bitů interpretováno s doplňkem dva, zatímco nejvyšší bit je interpretován jako kladné nebo záporné číslo. Pokud je starší bit “1”, je považován za záporné číslo. Uvažujme kód:
unsigned int var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
unsigned int pinLED = 3;
Typ short
Short je celočíselný datový typ, který uchovává dva bajty nebo 16-bitová data.
Rozsah proměnné typu short je -32768 až 32767 nebo -(215) až ((215) – 1). Arduino založené na mikrokontrolérech ARM a ATmega obvykle ukládá datovou hodnotu typu short na dva bajty. Uvažujme kód:
short var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
short pinLED = 3;
Typ long
Datový typ long je považován za proměnné s rozšířenou velikostí, které uchovávají čtyři bajty (32 bitů). Datová velikost typu long se pohybuje od -2147483648 do 2147483647. Při použití celých čísel by alespoň za jedním z nich mělo následovat písmeno L, které vynutí, aby číslo bylo datového typu long. Vezměme v úvahu kód:
long var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
long speed = 186000L;
Typ Unsigned long
Datové typy unsigned long jsou také považovány za proměnné s rozšířenou velikostí, které uchovávají 4 bajty (32 bitů).Tento typ však neukládá záporná čísla jako ostatní datové typy unsigned, takže jejich velikost se pohybuje od 0 do 4 294 967 295 neboli (2^32 – 1). Uvažujme kód:
unsigned long var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
unsigned long czas;
Typ byte
Byte je typ dat unsigned, který uchovává hodnoty v rozmezí 0 až 255. Vezměme si tento kód:
-
byte var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
byte x = 22;
Typ word
Typ word označuje nezáporná čísla rozložená do šestnácti bitů nebo dvou bytů a pohybuje se v rozmezí 0 až 65535. Uvažujme kód:
word var = val;
Kde:
var = proměnná
val = hodnota přiřazená proměnné var
Například:
word d = 5000;
Jak hodnotíte tento článek na blogu?
Klikněte na hvězdičku a ohodnoťte!
Průměrné hodnocení 4.2 / 5. Počet hlasů 27
Zatím nejsou žádné hlasy! Buďte první, kdo ohodnotí tento článek.