Az
Arduino programozás
során
különböző változó típusok segítségével kezelhetjük
adatainkat.
Most kezdjük a legegyszerűbb változó
típussal amit persze a legtöbbször használunk, ez pedig
az int
típus. Egész számok
tárolására szolgál 16bitben (2byte, 65536 érték).
Int érvényességi tartománya
-32768-tol 32767-ig, ha ennél nagyobb számot próbálunk eltárolni
az érték átfordul és a másik
szélső értéktől kezdődik előröl a számolás.
Példa
: int egesz_szam; void setup(){ Serial.begin(9600); } void loop(){ egesz_szam = 32767; Serial.println(egesz_szam); Serial.println(egesz_szam+1);// pozitív érték átfordul negatívba delay(2000); egesz_szam = -32768; Serial.println(egesz_szam); Serial.println(egesz_szam-1);// negatív érték átfordul pozitívba delay(2000); } |
Van mód, hogy az int típusunkat
nagyobb tartományban használhassuk ezt az unsigned
int
utasítással
érhetjük el. Az unsigned előjel nélkül használja változónkat
a pozitív tartományban:
unsigned int: 0-65535 (16bit)
unsigned int egesz
= 2;
void setup(){
Serial.begin(9600);
}
void
loop(){
Serial.println(egesz-1);
egesz*=2;
delay(1000);
}
A
soros monitort
bekapcsolva láthatjuk,
hogy ha a kiírt érték eléri a 65535 azután már csak ezt az
értéket ismétli, ez azért van mert
a túlcsordulás miatt ez az érték adódik a nullához és újra
ezt
szorozza majd meg kettővel.
Persze tárolhatunk ennél még nagyobb
egész számokat is, de ezt egy másik típusú változóval tehetjük
meg. Ez a változó a
long,
4byte-ban (32bit) tárolja el az
értékünket -2147483648-tól
2147483647-ig. A túlcsordulás erre a
változóra is érvényes és természetesen az unsigned utasítással
is működik a pozitív tartományban
(0-4294967295).
A
matematikai számítások
nagy
részénél szükséges tizedes számokat használnunk a megfelelő
pontosság eléréséhez, a programozásban erre fejlesztették ki a
lebegőpontos számokat.
Lebegőpontos számok tárolására a
float
változót használjuk, ez 32biten (4byte)
tárolja a számot,
-3.4028235E + 38-tól +3.4028235E + 38-ig. A float változó
értékadásánál mindig fel kell tüntetni a
tizedes pontot. Nézzünk egy példát:
float
lebego = 3.0;
float eredmeny;
int i;
void setup(){
Serial.begin(9600);
}
void loop(){
i+=4; // i értékét
növeljük
4-gyel
eredmeny = i/lebego; //maga a
számítás
Serial.print(i);
Serial.print(" / 3.0 = ");
Serial.println(eredmeny); // kiíratás
delay(1000);
}
Nézzük rögtön az első sort: float lebego = 3.0; itt látható, hogy értékadáskor minden értéknél ki kell tenni a tizedes pontot, még az egészeknél is. A progi elvégzi a számítást és kiírja a megfelelő eredményt a soros monitorra.
A
float számok csak 6-7
tized
pontosságúak, ha ennél nagyobb pontosságot szeretnénk elérni
akkor
egy másik típusú változót kell
használnunk, mégpedig a double-t.
A double ugyan úgy 32 biten
tárolja a számokat mint a float
viszont 15 számjegy pontossággal, tehát duplán.
Folyt köv.