12. Tipos de variables

Icono de vídeo de YouTube 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:

Tabla 12.1Tabla de tipos de variables en Arduino

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