Esta vez presentaremos un tipo de dato muy utilizado al momento de crear los programas en Arduino, los datos “Arrays”. Veremos qué son los Arrays en Arduino, cómo están estructurados y los usos que les podemos dar a los mismos.
Para saber los diversos tipos de datos observemos el siguiente listado que podemos manejar al momento de armar programas en Arduino:
Veamos un poco los intervalos de valores de cada uno:
- Los tipos de datos int, byte, unsigned char, char, word, unsigned int, long y unsigned long; representan números sin parte decimal.
- Los tipos de datos float y double; representan números en punto flotante, es decir, tienen parte decimal.
Para efecto de este post nos centraremos en los tipos de datos: “Arrays”. Un Array en Arduino, así como en otros lenguajes de programación, es una colección de variables que se almacenan en posiciones sucesivas, determinadas por índices numéricos. Son llamados matrices.
Para definirlos se utiliza la siguiente expresión:
tipo_de_elemento nombre_del_array[número_de_elementos_del_array];
Ejemplo:
int MyArray [10]={Valor1,Valor2,Valor3};
El primer índice de un Array es 0, por lo que un Array con 5 elementos, tendrá como posiciones inicial cero (0) y final cuatro (4), respectivamente. Hay que tener cierto cuidado con esto porque por ejemplo, en una matriz o Array con 10 elementos, el índice 9 es el último elemento. Por lo tanto:
1 2 3 4 |
int Hitek[10] = {9, 3, 2, 4, 3, 2, 7, 8, 9, 11}; // Hitek [ 9 ] = {9,3,2,4,3,2,7,8,9}; contiene 9 // Hitek [8] ={9,3,2,4,3,2,7,8,9,11}; es invalido y contiene información aleatoria (de otra dirección de memoria). |
Por esta razón hay que tener cuidado en el acceso a las matrices. El acceso más allá del final de una matriz (usando un número de índice mayor que el tamaño declarado – 1) resultará la lectura de la memoria que está en uso para otros fines. Escribir en las localidades de memoria aleatoria es definitivamente una mala idea y, a menudo puede conducir a resultados inesperados como fallos o mal funcionamiento del programa. Esto también puede ser un error difícil de encontrar. A diferencia de BASIC o JAVA, el compilador de C (en el que está basado Arduino) no realiza ninguna comprobación para ver si el acceso a una matriz está dentro de los límites del tamaño de la matriz que ha declarado. Para acceder a las distintas posiciones de un Array se utilizan los corchetes [ ], incluyendo en su interior el índice que queremos alcanzar. La declaración de un Array y la manera de iniciarlo lo podemos ver en los siguientes ejemplos:
- Puedes declarar un Array indicando su tamaño.
1 |
int Hitek[6]; |
- Se puede declarar una matriz o Array sin establecer un tamaño:
De esta forma nos evitamos indicar el índice porque ya detecta que su tamaño es cinco.
1 |
int Hitek [] = {2, 4, 8, 3, 6}; |
- Lectura de una posición y asignación de su valor a x
1 |
int x = Hitek [0]; |
- Almacenando valores
1 2 |
Hitek[0] = 1; Hitek[1] = 45; |
- Puedes declararle un tamaño a la matriz e iniciarla al mismo tiempo:
1 2 |
int Hitek[3] = {1, 20, 55}; char Hitek[6] = "hola"; |
- No podemos declarar un Array sin indicar su tamaño. Provocará un error de compilación
1 |
int Hitek []; |
También es posible recurrir a Arrays de más de una dimensión (2,3,…). Veamos el siguiente ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Declaramos e iniciamos el Array de dos dimensiones int Hitek[2][5] = {{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}; /* Valor del Array de dos dimensiones |---------| |1-2-3-4-5| |5-4-3-2-1| |---------| */ // Podemos asignar valores por separado Hitek[0][2] = 9; Hitek[1][1] = 8; /* Nuevo valor del Array de dos dimensiones |---------| |1-2-9-4-5| |5-8-3-2-1| |---------| */ // En estos Arrays multi-dimensionales sólo se puede omitir la dimensión del // primer índice, el resto hay que indicarlos int Hitek[][5] = {{1, 2, 3, 4, 5}, {5, 4, 3, 2, 1}}; |
“Los datos string no son más que un caso particular de Arrays, dedicados al almacenamiento de caracteres (char).”
Para ampliar un poco más sobre el uso de Arrays, vamos a mostrar el siguiente ejemplo:
Leds en secuencia, que luego de completar un ciclo irá a la inversa.
Configuración Utilizada:
Abrimos Arduino IDE y escribimos el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
int Hitek[] = {2, 3, 4, 5, 6, 7}; // le colocamos al Array el nombre de Hitek y establecemos el número de pines (longitud de la matriz) // dejamos Hitek en blanco porque como explicamos anteriormente ya ella sabe que es de 6 números. int cuenta = 0; // iniciamos la cuenta en 0. void setup() { // Hacemos todas las declaraciones de una vez // utilizamos for para iniciar cada pin como salida. // establecemos que la cuenta sea menor que el número de pines (longitud de la matriz) for (cuenta=0; cuenta<6; cuenta++) { pinMode(Hitek[cuenta], OUTPUT); } } void loop() { // aquí irá del más bajo al más alto. for (cuenta=0; cuenta<6; cuenta++) { digitalWrite(Hitek[cuenta], HIGH); // encendemos el pin. delay(100); // le daremos un tiempo de 100 milisegundos. digitalWrite(Hitek[cuenta], LOW); // apagamos el pin. delay(100); } // aquí irá del más alto al más bajo. for (cuenta=5; cuenta>=0; cuenta--) { digitalWrite(Hitek[cuenta], HIGH); delay(100); digitalWrite(Hitek[cuenta], LOW); delay(100); } } |
Si quieres ver otro ejemplo en donde se utilice Tipo de Dato Array, visita el siguiente post:
Espero que la información suministrada sea de su comprensión y utilidad.
Recuerda seguir visitando nuestros post.
Saludos.