Tenemos diez (10) tipos de datos básicos, la mitad de ellos son para representar numeros:
Tipo | Nombre | Tamaño |
---|---|---|
byte | Numero pequeños | 1 bytes |
int | Entero | 2 bytes |
long | Entero largo | 4 bytes |
float | Flotante | 4 bytes |
El resto tienen otro tipo de usos como:
Tipo | Nombre | Tamaño |
---|---|---|
void | Vacio | 1 bytes |
char | Carácter | 1 bytes |
string | Cadena de caracteres | 1 byte por carácter |
bool | Boleano | 1 bytes |
time_t | Tiempo | 4 bytes |
Si los operandos son de diferentes tipos, para el cálculo se usará el tipo más grande de los operandos en juego. Por ejemplo, si uno de los números es del tipo float y otro de tipo int, para el cálculo se usará float.
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ó.
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 byte x = 03; //0 = formato octal, 3 byte x = 0x3; //0x = formato hexadecimal, 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.
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
Use el operador (int) para convertir un tipo de variable a otro (también llamado casting) sobre la marcha. Por ejemplo, i = (int) 3.6 establecerá la variable i igual a 3. El casting de float a int, trunca los decimales, por lo que un buen truco es sumar 0.5 antes de hacer el casting asi el redondeo es adecuado. Por ejemplo, float x = 3.6 + 0.5, luego i = (int) x establecerá la variable i igual a 4.
El short es igual al int y word que es unsignet int.
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; x = 1000L123; //Con 1000L forzamos long x = 2521UL123; //Con 2521UL forzamos unsigned long
Se puede extender al doble si se limita a solo numero s positivos ver unsigned
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. Ejemplo: 1/3 + 2/3 podría no ser exactamente 1.
Esencialmente lo que ocurre es que muchos números decimales exactos en base 10 son periódicos en base 2, osea que tienen infinitos decimales, por lo que ciertas operaciones pierden precisión.
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.
Todas las operaciones la deberemos haremos sobre los float, ya que si usamos un int convertido, nos arrastrará un error cada vez más grande; es decir, si en un momento hemos de convertir a int para mostrarlo, siempre continuaremos usando el valor anterior del float, en lugar de introducir el int convertido, porque iremos acumulando cada vez más error.
En Arduino un double es lo mismo que float.
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
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()
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
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:
Tipo | Valor max | Ocupa |
---|---|---|
int | 65,535 (2^16-1) | 2 bytes |
long | 4,294'967,295 (2^32-1) | 4 bytes |
char | 255 (2^8-1) | 1 byte |
unsigned int x=78U123 //Con 78U forzamos unsigned
unsigned char es idéntico a byte por lo que en Arduino se prefiere este ultimo.
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
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.
Nombre | Descripción |
---|---|
void / null / return | Vacio / Nulo / Devolver |
true / false | Verdadero / falso |
HIGH / LOW | alto / bajo |
INPUT / OUTPUT / INPUT_PULLUP | Entrada / salida / entrada con pull-up |
DEC, BIN, HEX, OCT | Determina la base |
PI / HALF_PI / TWO_PI | Valor de PI |
CHANGE / FALLING / RISING | Usado en interrupciones |
Most Significant Bit First
Least Significant Bit First
Representa al LED incluido en el pin D13.