Uso de Arrays en Arduino - Programar con Arreglos y Vectores
¡Bienvenido al undécimo capítulo de este curso de Arduino desde cero! En el tutorial anterior te expliqué cómo crear tus propias funciones. Hoy también vamos a ver un nuevo concepto de programación, conocido como arrays o arreglos.
¡Suscríbete a nuestro canal de YouTube para aprender más sobre Arduino!
Qué es un array
Un array o arreglo es una secuencia de elementos del mismo tipo. Estos elementos están ordenados de forma contigua en la memoria. Además, se puede acceder a cada elemento individualmente utilizando un índice.
Una cosa muy importante a tener en cuenta es que la posición del primer elemento del array es la posición 0, no la 1. Si por ejemplo tienes un arreglo de 20 elementos, la posición de cada elemento iría de la 0 a la 19.
Cómo definir un arreglo en Arduino
Hay dos formas básicas de crear un array. La primera de ellas es NO inicializándolo y la segunda es inicializandolo. Lo primero que tienes que escribir es el tipo de dato de los elementos que guarda el array. Si por ejemplo quieres que guarde caracteres tendrás que utilizar «char».
Después tienes que escribir el nombre del array. Recuerda que un arreglo es una variable, así que siempre tienes que intentar que el nombre tenga sentido y describa de forma breve los datos que guarda.
En el caso de que no quieras inicializar el array necesitas saber cuantos elementos va a guardar. El número de elementos que va a almacenar tienes que escribirlo dentro de los corchetes. De esta manera estás reservando memoria aunque ésta aun no esté ocupada.
Si por el contrario si quieres inicializarlo puedes dejar los corchetes vacíos. Solo te faltaría asignarle al array los elementos que quieres que guarde. Para ello utiliza como siempre el operador «=». Los diferentes elementos del vector tienen que estar separados por una coma dentro de unas llaves. Abajo tienes un ejemplo para cada caso.
//Creación de dos arrays en Arduino int numeros[20]; //Sin inicializar char miNombre[] = {'W', 'e', 'x', 't', 'e', 'r'}; //Inicializando
Calcular tamaño de un array en Arduino
Vamos a crear ya el primer programa utilizando un arreglo. Es muy sencillo. Simplemente he creado el mismo array que en el apartado anterior, llamado «miNombre». El objetivo es aprender a calcular el tamaño de un vector y acceder a los elementos que guarda para poder utilizarlos.
Para calcular el tamaño del array he utilizado la función «sizeof()». Sin embargo tienes que tener cuidado porqué dicha función devuelve el número de elementos multiplicado por el número de bytes del tipo de dato del array.
Por ejemplo, los números enteros ocupan 2 bytes de memoria. Si tienes un array de tipo entero con 30 elementos, sizeof te devolverá 60. Por este motivo divido el resultado obtenido entre el sizeof del tipo de dato del array, obteniendo así el número de elementos.
Para acceder a un dato del array de forma individual simplemente tienes que escribir el nombre del arreglo y entre corchetes la posición del dato al que quieres acceder. Recuerda que la primera posición es la 0, NO la 1.
char miNombre[] = {'W', 'e', 'x', 't', 'e', 'r'}; int nElements = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); nElements = sizeof(miNombre) / sizeof(char); Serial.print("Numero de elementos: "); Serial.println(nElements); Serial.println(miNombre[3]); } void loop() { // put your main code here, to run repeatedly: }
Hacer parpadear varios LEDs utilizando un Array
Este programa también es bastante fácil pero nos sirve para seguir aprendiendo a utilizar los arrays en Arduino en diferentes casos. El objetivo es hacer parpadear varios leds, en concreto 5, utilizando un arreglo.
Como puedes ver he creado un array llamado «leds» que básicamente guarda los números de los pines digitales a los que tengo conectados los 5 leds. He calculado el tamaño del vector de la misma forma que en el código anterior.
Con el bucle for lo que hago es inicializar cada pin digital. ¿Cómo funciona? Inicialmente la «i», que es el contador, vale 0. La condición para que se repita el bucle es que tiene que ser menor que el número de elementos del array. El incremento es de 1 en 1.
Dentro del bucle for, con la función «pinMode()» inicializo cada pin digital. En vez de poner el número del pin directamente, utilizo el array «leds» accediendo a cada elemento de forma individual. En la primera vuelta del bucle la «i» vale 0, así que con leds[0] accedo al primer elemento del arreglo, que es el 9, inicializando el pin digital 9 como salida. Esto se repite con todos los números que guarda «leds».
int leds[] = {9, 10, 11, 12, 13}; int nElements = 0; void setup(){ //put your setup code here, to run once: Serial.begin(9600); nElements = sizeof(leds) / sizeof(int); for(int i = 0; i < nElements; i++){ pinMode(leds[i], OUTPUT); } } void loop(){ //put your main code here, to run repeatedly: for(int i = 0; i < nElements; i++){ digitalWrite(leds[i], HIGH); delay(200); digitalWrite(leds[i], LOW); delay(200); } }
Para encender y apagar los leds hago exactamente lo mismo pero en vez de utilizar la función «pinMode» utilizo «digitalWrite» con un delay entre medias.
Ejemplo de arrays en Arduino
Te dejo aquí un programa bastante más complicado utilizando los arrays en Arduino. Yo te recomiendo que intentes leerlo y entenderlo por tu cuenta. Si quieres comprobar si lo has entendido correctamente al final del vídeo que hay al principio de esta página lo explico.
char texto[500]; int cont = 0; int nElements = 0; void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: do{ if(Serial.available() != 0){ texto[cont] = Serial.read(); cont +=1; } }while(cont < 500 && texto[cont-1] != '.'); cont = 0; nElements = sizeof(texto) / sizeof(char); for(int i = 0; i < nElements; i++){ Serial.print(texto[i]); texto[i] = ' '; } Serial.println(" "); delay(100); }