12. Tipos de variables¶
VÍDEO: Variables en Arduino II. Tipos, advertencias, ámbitos…
Existen más tipos de variables, en nuestros proyectos los que más necesitaremos serán:
Tipo |
Tamaño |
Rango |
|---|---|---|
bool |
1 byte |
0, 1 (false, true) |
byte |
1 byte |
0 a 255 |
int |
2 bytes |
-32768 a 32767 |
unsigned int |
2 bytes |
0 a 65535 |
long |
4 bytes |
-2147483648 a 2147483647 |
unsigned long |
4 bytes |
0 a 4294967295 |
float |
4 bytes |
3,4028235E-38 a 3,4028235E+38 Con 7 decimales de precisión |
Desbordamiento¶
Si sobrepasamos el rango de una variable se produce un desbordamiento, reiniciándose a los primeros valores del rango.
Por ejemplo, damos a la variable a = 255, el máximo para el tipo
byte (255), si después le sumamos 1 se produce desbordamiento y vemos
en el monitor serie que el resultado no será 256, sino se reinicia al
mínimo valor del rango (0):
1byte a = 255; // Asigno a la variable a el máximo valor posible
2
3void setup() {
4 Serial.begin(9600);
5}
6
7void loop() {
8 a = a + 1;
9 Serial.println(a);
10 delay(1000);
11}
12
13Salida por el monitor serie:
14
150
161
172
Limitaciones del tipo float¶
El tipo de datos float tiene sólo entre 6 y 7 dígitos decimales de precisión. Eso significa el número total de dígitos, no el número a la derecha del punto decimal.
Si hacemos cálculos con float, debemos agregar un punto decimal; de lo contrario, se tratará como un int:
int a = 9; void setup() { Serial.begin(9600); Serial.println(a/2); Serial.println(a/2.0); } Salida por el monitor serie: 4 <-- Numero entero 4.50 <-- Número en coma flotante
Los números de coma flotante no son exactos y pueden producir resultados extraños al compararlos. Por ejemplo, es posible que 9,0/0,3 no sea igual a 30,0 al compararlos.
Para que realice un redondeo correcto al pasar a int, hay que usar la función
round():float x = 2.9; // Variable de tipo float int y = x; // Nos da como resultado y = 2 int y = round(x); // Nos da como resultado y = 3
Las matemáticas de punto flotante son mucho más lentas que las matemáticas de enteros al realizar cálculos, por lo que deben evitarse si, por ejemplo, un bucle tiene que ejecutarse a máxima velocidad.
Para obtener un número de decimales concreto en el monitor serie, se indica de la siguiente manera (ejemplo para que se muestren 4 decimales):
void setup() { Serial.begin(9600); Serial.println(3.14159265359, 4); } Salida por el monitor serie: 3.1416