Arduino a Typy premenných
byte
byte je najmenší dátový typ Arduina, ktorý môžete použiť pre okrúhle čísla pri programovaní s Arduino. Bajt obsahuje 8 bitov. Bit je jednoducho binárna informácia:
0 alebo 1.
Takže bajt bude obsahovať 8 binárnych hodnôt. Napríklad číslo 45 zapísané 8-bitom bude vyzerať takto: 00101101. Takto bude bajt uložený v Arduine. Vo svojom programe si môžete vybrať, či použijete binárne vyjadrenie čísla alebo desiatkové vyjadrenie (funguje aj hexadecimálne).
byte b = 260; // desiatkový
//... alebo ...
byte b = 0b00101101; // binárne
// ... alebo ...
byte b = 0x2D; // hexadecimálny
A môžete vytlačiť číslo pomocou funkcie Serial.println() s použitím rôznych argumentov pre rôzne reprezentácie čísla.
byte b = 45;
void setup() {
Serial.begin(9600);
Serial.println(b); // štandardne tlačiť v desiatkovej sústave
Serial.println(b, DEC); // tlačiť v desiatkovej sústave
Serial.println(b, BIN); // tlačiť binárne
Serial.println(b, HEX); // tlačiť v šestnástkovej sústave
}
void loop() {
}
výsledok v sériovom monitore:
45
45
101101
2D
Minimálna hodnota pre bajt je 0 a maximálna hodnota je 255. Ako vidíte, je to dosť málo, takže pri používaní tohto typu údajov buďte opatrní. Používajte ho len na ukladanie veľmi malých čísel. A čo sa stane, ak sa pokúsite uložiť číslo menšie ako 0 alebo väčšie ako 255? Program bude stále fungovať, ale vaša premenná sa preplní. Pretečenie znamená, že keď hodnota dosiahne 256, vráti sa späť na 0.
Takže, ak sa pokúsite priradiť 260 k bajtu:
byte b = 260;
void setup() {
Serial.begin(9600);
Serial.println(b); //štandardne tlačiť v desiatkovej sústave
Serial.println(b, DEC); // tlačiť v desiatkovej sústave
Serial.println(b, BIN); // tlačiť binárne
Serial.println(b, HEX); // tlačiť v šestnástkovej sústave
}
void loop() {
}
Tak získate:
4
4
00000100
4
260 sa zmenilo na 4, pretože 256 sa vráti na 0, potom 257 sa zmení na 1 atď… a z 260 sa stane 4. Takže opäť dávajte pozor pri používaní malých dátových typov, ako je bajt vo vašich programoch Arduino:
ak sa pokúsite použiť príliš veľké číslo, premenná pretečie a jej hodnota nebude správna. Váš program sa bude dať stále skompilovať, ale pri spustení sa vyskytnú všetky druhy chýb aplikácie.
Int
Int alebo celé číslo je jedným z najbežnejších typov premenných, s ktorými sa budete stretávať. Int je okrúhle číslo, ktoré môže byť kladné alebo záporné. Na doskách Arduino, ako sú Uno, Nano a Mega, int ukladá 2 bajty informácií. Takže napríklad 9999 bude reprezentované 00100111 00001111. Hoci nepotrebujete poznať binárne vyjadrenie, môžete pracovať iba s desatinnými číslami.
int i = 9999;
int j = -4578;
Int môžete použiť všade na uloženie akýchkoľvek informácií reprezentovaných okrúhlym číslom. Napríklad: počítadlo, teplota, počet krokov pre krokový motor, uhol pre servomotor atď.
Minimálna hodnota pre 2-bajtový int je -32 768 a maximálna hodnota je +32 767. Čo sa týka bajtov, môže pretekať. Napríklad, ak sa pokúsite priradiť 32 768 (čo je tesne nad maximálnym limitom), hodnota, ktorú prečítate vo vnútri premennej, bude -32 768. A ak sa pokúsite priradiť -32 769, dostanete +32 767. Preto dávajte pozor, aby ste pri int nepoužívali príliš veľké čísla. Na doskách, ako sú Arduino Due a Zero, celé čísla ukladajú 4 bajty, takže rozsah hodnôt je oveľa vyšší: -2 147 483 648 až 2 147 483 647. Ale na klasických Arduino doskách (Uno, Nano, Mega atď.), Ak chcete použiť väčšie celé čísla, budete musieť použiť long namiesto int.
long
A long je presne to isté ako int, ale používa 4 bajty.
Minimálna hodnota bude -2 147 483 648 a maximálna hodnota 2 147 483 647. Vďaka tomu sa nemusíte príliš obávať preplnenia.
long l = 4000000;
long k = - 1234567;
Typy premenných Arduino (unsigned)
Pre štandardné premenné s okrúhlym číslom môžete pred typ údajov pridať „unsigned“. Ak pridáte „unsigned“, premenná bude obsahovať iba kladné čísla, začínajúce od 0. To je to, čo sme mali pre bajt, čo je už unsigned dátový typ.
unsigned int
Ak chcete vytvoriť unsigned int:
unsigned int a = 45000;
unsigned int bude začínať na 0 a bude mať maximálnu hodnotu 65 535 (4 294 967 295 v 4-bajtovej tabuli, ako napríklad Due/Zero). Keďže už nemáte záporné čísla, všetky tieto čísla sa pripočítajú k maximálnej kladnej hodnote, ktorú môžete použiť. Koncept pretečenia je tu rovnaký. Ak sa pokúsite použiť 65 536, vrátite sa na 0. Takže unsigned int možno použiť, ak ste si istí, že pre premennú uložíte iba kladné čísla. Zvýši sa aj maximálny limit, takže ak napríklad musíte na čítanie snímača použiť premennú od 0 do 50 000, bude to dobrá voľba.
unsigned long
Ak chcete vytvoriť unsigned long:
unsigned long b = 999999;
unsigned long bude začínať na 0 a bude mať maximálnu hodnotu 4 294 967 295, čo je veľmi veľké číslo. Opäť platí, že použitie, je veľmi podobné typu údajov int, len pre väčšie čísla. Na Arduine, keď sa pokúsite získať čas pomocou milis() alebo mikros(), dostanete výsledok v unsigned long.
Typy premenných Arduino (bool/boolean)
Bool/boolean je konkrétny dátový typ Arduina, ktorý obsahuje iba binárne informácie: 1 alebo 0 (pravda alebo nepravda).
Booleany použijete na testovanie podmienok, kde je odpoveď jednoduché áno/nie.
bool isComponentAlive = false;
void setup() {
if (!componentAlive)
{
//spustiť proces inicializácie
isComponenetAlive = true;
}
}
void loop() {
}
V Arduine môžete použiť štandardný typ bool C++ alebo typ boolean, ktorý je identický. Dokumentácia k Arduinu však naznačuje, že používate iba bool.
Typy premenných Arduino (Float)
Zatiaľ sme videli iba to, ako ukladať a používať okrúhle čísla s Arduino. Ale čo ak chcete uložiť číslo ako 3,14?
float
Premenná float môže uložiť záporné alebo kladné číslo float. Ako každý typ údajov má minimum a maximum: 3,4028235E+38 až -3,4028235E+38. Toto je oveľa väčšie ako long, aj keď float je tiež uložený na 4 bajtoch. Dôvodom je jednoducho to, že oba typy údajov sú uložené iným spôsobom.
Ak chcete vytvoriť float:
float f = 2.97;
float g = -6000.0;
Takže rozlíšenie floaf je väčšie ako okrúhle čísla, čo ich robí vhodnými pre niektoré výpočty alebo čítanie spojitej hodnoty zo senzora. Všimnite si však, že presnosť pre float nie je 100%, na rozdiel od dátových typov okrúhlych čísel. Napríklad, ak sa pokúsite priradiť 3,00 v rámci pohyblivého čísla, skutočná hodnota môže byť niečo ako 3,0000001.
double
V doskách ako Uno, Mega a Nano sú double a float identické. Napríklad na Due je dvojnásobok uložený na 8 bajtoch namiesto 4, čím sa líši. Môžete uložiť aj väčšie čísla. Jedna vec, ktorú by ste mali vedieť o číslach s pohyblivými číslami (typ údajov float alebo double): mikrokontroléru Arduino zaberie oveľa viac času na spracovanie výpočtu s pohyblivými číslami ako s okrúhlymi číslami. Keďže výpočtový výkon je veľmi obmedzený, snažte sa čo najviac používať okrúhle čísla a čísla float, double len vtedy, keď nemáte na výber.
Typy premenných Arduino Typy textových údajov
Skvelé, teraz ste videli, ako ukladať boolovské, zaokrúhľovacie a pohyblivé čísla. Poslednou dôležitou kategóriou je spôsob ukladania textu, ktorý sa často používa, keď chcete zdieľať informácie s používateľom (text má pre človeka väčší zmysel ako hexadecimálny kód) alebo napríklad komunikovať v ASCII.
char
Typ údajov char je dosť špecifický, pretože sa používa hlavne na ukladanie písmen, ale nakoniec je skutočná hodnota číslo medzi -128 a +127 (uložené v 1 byte). Zodpovedajúce hodnoty medzi písmenom a číslicami sú tie, ktoré nájdete v tabuľke ASCII.
Napríklad veľké písmeno „F“ má hodnotu 70 a malé písmeno „f“ má hodnotu 102.
char f_upper = 'F';
// ALEBO - rovnaké ako
char f_upper = 70;
char f_lower = 'f';
// ALEBO - rovnaké ako
char f_lower = 102;
Výpočty môžete vykonávať pomocou char. Ak k písmenu „F“ pridáte +1, číslo sa zmení na 71 a zodpovedajúce písmeno „G“ bude veľké. Typ údajov char môže byť celkom užitočný na odosielanie údajov cez Serial/I2C/SPI medzi zariadeniami. Nezaberá veľa miesta (1 bajt, čo je minimum), takže je rýchlejší na prenos a akciu môžete priamo priradiť k písmenu – napr.: „m“ na pohyb motora, „s“ na zastavenie, „ a’ na zrýchlenie atď.
unsigned char
Dátový typ unsigned char je v skutočnosti úplne rovnaký ako typ bajtovej premennej. Obe majú minimálnu hodnotu 0 a maximálnu 255. Odporúča sa použiť bajt namiesto znaku bez znamienka.
String
Dátový typ String je špecifický pre Arduino, nenájdete ho v štandardnom C/C++. Všimnite si tiež veľké písmeno „S“. Typ premennej je String, nie reťazec. Tento typ použijete na ukladanie textu. Operácie, ako napríklad zreťazenie, môžete vykonávať priamo pomocou operátora „+“.
String a = "Ahoj";
String b = "svet";
String result = a + " " + b;
String je trieda, nie je to dátový typ. Ak chcete vytvoriť reťazec, musíte použiť pole znakov. S triedou String si zjednodušíte život a máte aj kopu funkcií navyše.
Pole premenných
A samozrejme, každý z typov údajov Arduino, ktoré ste tu videli, môže byť uložený v poli. Uistite sa, že používate iba jeden typ údajov pre všetky prvky poľa.
int intArray[3] = { 1, -2, 3 };
long longArray[3] = {4500, -798, 0};
unsigned int unsignedIntArray[3] = { 10, 11, 12 };
unsigned long unsignedLongArray[3] = {20000, 30000, 999999};
bool boolArray[3] = {nepravda, pravda, nepravda };
double floatArray[3] = { 8.0, 9.9, 12121313131.3 };
double doubleArray[3] = { 3.14, -3.14, 7.00 };
char charArray[3] = { 'a', 'b', 'c' }; // alebo priamo: = "abc";
String stringArray[3] = { "Ahoj", " ", "svet" };
Záver – Arduino dátové typy
V tomto návode ste objavili všetky štandardné dátové typy Arduino, ktoré budete najčastejšie používať vo svojich programoch. Neváhajte sa vrátiť k tejto príručke vždy, keď si nie ste istí, ktorý typ premennej by ste mali použiť, alebo aké sú ich obmedzenia.
Pridaj komentár