Tipos de dato

Tenemos diez (10) tipos de datos básicos, la mitad de ellos son para representar numeros:

Tipos de datos numéricos
TipoNombreTamaño
byteNumero pequeños1 bytes
intEntero2 bytes
longEntero largo4 bytes
floatFlotante4 bytes

El resto tienen otro tipo de usos como:

Tipos de datos no numéricos
TipoNombreTamaño
voidVacio1 bytes
charCarácter1 bytes
stringCadena de caracteres1 byte por carácter
boolBoleano1 bytes
time_tTiempo4 bytes

1. void

La palabra clave void solo se usa en declaraciones de funciones. Indica que no se espera que la función devuelva información a la función desde la que se llamó.

2. byte

Es el formato numero de 1 byte (8 bits) sin firmar. Son enteros comprendidos en el rango entre 0 y 255.

byte n = 128;
byte x = B11;   //B = formato binario, 3
byte x = 0b11;  //0b = formato binario, 3

Es lo mismo que unsigned char.

Es importante tener en mente que un numero del tipo byte puede contener hasta 8 valores verdadero/falso empacados en un solo byte y que se puede operar con ellos con operadores bit a bit y funciones internas de bits y byte.

3. int

Es el formato numérico de 2 bytes (16 bits), son enteros comprendidos en el rango de -32,768 a 32,767 (2^15-1).

int n = 0;
int a = -555;

Se puede extender al doble si se limita a solo números positivos ver unsigned

Hay que tener cuidado con estos limites porque de sobrepasarse se da la vuelta como si fuera un circulo.

int x = 32767;
x++; //-32768

El short es igual al int y word que es unsignet int.

4. Long

Es el formato numérico de 4 bytes (32 bits), son enteros comprendidos en el rango de -2147483648 a 2147483647 (2^31-1).

long n = 12345;

Se puede extender al doble si se limita a solo numero s positivos ver unsigned

5. float

El formato numérico de 4 bytes (32 bits), son números de "punto flotante" osea con decimales. Están comprendidos entre 3.4028235E +38 y +38-3.4028235E.

float pi = 3.1416;
int x:
float y;
x = pi/2    //1
y = pi/2    //1
y = pi/2.0  //1.5708

Los numero tipo float tienen sólo 6~7 dígitos decimales de precisión. Eso significa que el número total de dígitos, no es el número a la derecha del punto decimal.

Los números de punto flotante no son exactos, y pueden producir resultados extraños en las comparaciones. Los cálculos matemáticos de punto flotante son también mucho más lentos que los del tipo de números enteros, por lo que debe evitarse su uso si es posible. Solo almacena 6 dígitos y el resto lo redondea.

Número de punto flotante de doble precisión. En Arduino UNO ocupa 32 bits (4 bytes). Es decir: double y float son exactamente de la misma precisión. Las operaciones matemáticas con números float son mucho más lento que las operaciones matemáticas con enteros (byte o int), por lo que deben evitarse en lo posibles. Si hacemos operaciones matemáticas con float, es necesario agregar un punto decimal, de lo contrario, será tratado como un int.

En Arduino un double es lo mismo que float.

6. char

Un tipo de datos que ocupa 1 byte (8 bits) de memoria que almacena un valor de un solo carácter. Los literales de caracteres están escritos en comillas simples, como esta: 'A'. En realidad lo que se almacena es el código ASCII. Esto significa que es posible hacer aritmética con char, en los que se usa el valor ASCII del carácter (por ejemplo, 'A' + 1 tiene el valor 66 osea B). El tipo de datos char es un tipo con signo (firmado), lo que significa que codifica números de -128 a 127. Para un tipo de datos sin signo, de 1 byte (8 bits), use el tipo de datos de byte.

char resp = 'S';
char uno = 65; //Almacena A

7. string

En Arduino string es un tipo de datos que es usado para guardar cadenas de caracteres. Cada caracteres es un dato de 1 byte (8 bits) representados en código ASCII. Una variable string siempre DEBE de terminar en un carácter nulo (\0). Es de mucha utilidad cuando se quieren forman mensajes de texto para ser enviados por el puerto serial. En Arduino string se guarda en un vector de datos tipo carácter.

string nombre="cadena";

La construcción de una cadena a partir de un número da como resultado una cadena que contiene la representación ASCII de ese número. Es como una matriz de caracteres.

string n = "Hola mundo";
string x = string(13);
string x = string(millis(), HEX);
string x = string(analogRead(0), BIN);
string z = "214";

Todas las cadenas terminan con un carácter nulo (código ASCII 0), esto permite que las funciones (como Serial.print()) sepan dónde está el final de una cadena. De lo contrario, continuarían leyendo los siguientes bytes de memoria que no son realmente parte de la cadena. Esto significa que la cadena necesita tener espacio para un carácter más que el texto que desea que contenga.

No confunda string que es un tipo de dato con el objeto String()

8. bool

Los posibles valores son: true o false y ocupa 1 byte (8 bits) en memoria.

bool r = false;
//Equivalencias
TRUE, HIGH o !=0
FALSE, LOW o 0

Ojo que si almacenamos cualquier numero distinto a cero es TRUE.

bool r = false;
if (r){
	//Hago algo si es verdadero
	digitalWrite(3, r);
}else{
	//Hago algo si es falso
	digitalWrite(3, r);
}
delay(100);
r = !r;  //Niego valor

9. Unsigned

Algunos tipos de datos como int, long, float y char se pueden modificar usando unsigned. Los números sin sin firmar (unsigned) no soportan números negativos y como contraparte ocupando el mismo espacio en bytes, soportan entre 0 y el doble del normal.

unsigned int nombre [= valor];
unsigned long nombre [= valor];
unsigned float nombre [= valor];
unsigned char nombre [= valor];

Resumen de valores:

Sin firmar
TipoValor maxOcupa
int65,535 (2^16-1)2 bytes
long4,294'967,295 (2^32-1)4 bytes
char255 (2^8-1)1 byte

unsigned char es idéntico a byte por lo que en Arduino se prefiere este ultimo.

10. Time

Solo funcionan si previamente cargas la librería Time.h. Esto te permite usar un nuevo tip de dato llamado time_t de 4 bytes (32 bits) que almacen lo que llamamos el "tiempo Unix", que son los segundos transcurridos desde el 1-ENE-1970. Esto tiene la gran ventaja de que podemos sumar o restar fechas.

time_t tm = now();
tm.year();
tm.month();
tm.day();
tm.hour();
tm.minutes();
tm.seconds();

Para saber mas ver las funciones de Fecha y Hora

11. Palabras reservadas

Existen muchas palabras reservadas en Arduino. Felizmente el IDE las pintara de color azul en el boceto para indicarlo. Fíjate que distinguen mayúsculas de minúsculas. La mayoría se escriben en MAYUSCULAS, salvo null, true y false que son en minúsculas.

Palabras reservadas
NombreDescripción
void / null / returnVacio / Nulo / Devolver
true / falseVerdadero / falso
HIGH / LOWalto / bajo
INPUT / OUTPUT / INPUT_PULLUPEntrada / salida / entrada con pull-up
DEC, BIN, HEX, OCTDetermina la base
PI / HALF_PI / TWO_PIValor de PI
CHANGE / FALLING / RISINGUsado en interrupciones
static / private / protected / public signed / unsigned throw try

11.1 MSBFIRS()

Most Significant Bit First

11.2 LSBFIRS()

Least Significant Bit First

11.3 LED_BUILTIN

Representa al LED incluido en el pin D13.

11.4 SERIAL

11.5 DISPLAY