En este momento estás viendo Como usar las matrices (arrays) en Arduino

Como usar las matrices (arrays) en Arduino

¿Que es una matriz?

Una matriz (array) es una colección de variables que tienen todas el mismo y único nombre, pero que pueden distinguirse entre sí por un número de índice. Es decir: en vez de tener diferentes variables – por ejemplo de tipo “char” – cada una independiente de las demás (varChar1, varChar2,varChar3…) podemos tener una única matriz que las agrupe todas bajo un mismo nombre (por ejemplo, varChar), y que permita que cada variable pueda manipularse por separado gracias a que dentro de la matriz cada una está identificada mediante un índice numérico, escrito entre corchetes (varChar[0], varChar[1], varChar[2]…).

Las matrices sirven para ganar claridad y simplicidad en el código, además de facilitar la programación.

Al utilizar matrices debemos tener presente que para consultar o asignar valores, debemos comenzar indexando el primer elemento por el número cero, que será el primer elemento de la matriz.

Ejemplo 1 – Como declarar las matrices

int misEnteros[6];                           //declara una matriz de 6 variables de tipo int
int misPines[] = {2, 4, 8, 3, 6};            //declara una matriz de 5 variables tipo int
float misSensores[5] = {2, 4, -8, 3.8, 2.1}; //declara una matriz de 5 variables tipo float
char mensaje[5] = "Hola";                   //declara una matriz de 5 elementos tipo char
char mensaje [] = "Hola";                   //declara una matriz de 5 elementos tipo char
char mensaje [5] = {'h','o','l','a'};       //declara una matriz de 5 elementos tipo char

Las matrices tipo char necesitan un carácter adicional para saber cuál es el fin de la matriz, esto debemos tenerlo en cuenta para el tamaño de la matriz.

Asignar y tomar valores de una matriz

Para asignar y consultar los valores de una matriz se usa el operador de asignación (=).

 misSensores[0] = 10; //asigna 10 al primer elemento de la matriz
 x = misSensores[4];  //guarda el valor del quinto elemento de la matriz en la variable x

Ejemplo 2 – Encender en secuencia un conjunto de Leds

int pines[] = {2, 3, 4, 5, 6, 7};  //declaro una matriz con los numeros de pines a usar
int contador = 0;                  //Una variable contador
int tiempo = 100;                  //Una variable guarda el tiempo de activacion de los pines

void setup(){
  for (contador=0; contador<6; contador++) {    //Uso un for para declarar todos los pines
    pinMode(pines[contador], OUTPUT); }       
}
 void loop() {
  for (contador =0; contador <6; contador ++) { //Uso un for para encender leds conectados
   digitalWrite(pines [contador], HIGH);        //a los pines, y uso una matriz para acceder
   delay(tiempo);                               //a ellos secuencialmente
   digitalWrite(pines [contador], LOW);
   delay(tiempo);
  }
  for (contador =5; contador >=0; contador --) {
   digitalWrite(pines [contador], HIGH);
   delay(tiempo);
   digitalWrite(pines [contador], LOW);
   delay(tiempo);
  }
}

Ejemplo 3 – Modificar una matriz de caracteres

char mensaje [] = "Hola";
void setup() {
 Serial.begin(9600);
 Serial.println(mensaje);
 mensaje[2]='j'; //modifico el elemento numero 2 de la matriz
 Serial.println(mensaje);
}
void loop() {}

En este ejemplo usamos un algoritmo para encontrar el valor mínimo y máximo de una matriz de cierto numero de elementos. Primero creo una matriz y le asigno valores aleatorios a todos sus elementos, luego uso el algoritmo que funciona comparando cada valor de la matriz con un mínimo y un máximo predeterminado y actualiza el resultado en unas variables para ser visualizados en el monitor serie.

Ejemplo 4 – Algoritmo para determinar el valor mínimo y máximo de una matriz

int matrizEnteros[20];  //Declaro una matriz de 20 elementos
int valorMaximo = 0; //inicio con el valor minimo que pueden tener los elementos de la matriz
int valorMinimo = 100; //inicio con el valor maximo que pueden tener los elementos de la matriz
int elementoMinimo,elementoMaximo; // para almacenar los indices

void setup() {
  Serial.begin(9600); //Inicio el monitor serie a 9600 baudios
  Serial.println("Los valores de la matriz son:");
  for (int z=0;z<20;z++){ //Asigno valores aleatorios a los elementos de la matriz
    matrizEnteros[z]=random(0,100); // solo para ilustrar como funciona el algoritmo
    Serial.print(z);  //imprimo el contenido de cada elemento de la matriz
    Serial.print(" Valor: ");
    Serial.println(matrizEnteros[z]);  
  }
  // Este el algoritmo de minimos y maximos
  for(int i=0;i<20;i++){  //se evalua cada elemento de la matriz
    // Guarda el valor maximo en matriz
    if (matrizEnteros[i] > valorMaximo) {
      valorMaximo = matrizEnteros[i]; // si es mayor guardo el valor y el indice del elemento de la matriz
      elementoMaximo = i;
    }
    // Guarda el valor minimo en matriz
    if (matrizEnteros[i] < valorMinimo) {
      valorMinimo = matrizEnteros[i]; // si es menor guardo el valor y el indice del elemento de la matriz
      elementoMinimo = i;
    }
  }
  // Imprimo el resultado para el maximo
  Serial.print("El valor maximo es: ");
  Serial.print(valorMaximo);
  Serial.print(" y es el elemento: ");
  Serial.print(elementoMaximo);
  Serial.println(" de la matriz");
  // Imprimo el resultado para el minimo
  Serial.print("El valor minimo es: ");
  Serial.print(valorMinimo);
  Serial.print(" y es el elemento: ");
  Serial.print(elementoMinimo);
  Serial.println(" de la matriz");
}

void loop() {}

Matrices de cadenas de texto

Es posibles hacer matrices de cadenas de texto, este es un ejemplo de matrices de dos dimensiones, en el ejemplo siguiente el asterisco después del tipo de dato “char*“ indica que esta es una matriz de punteros. Sin entrar en detalles que son los punteros podemos ver como se usan.

Ejemplo 5 – Matrices de cadenas de texto

char* miscadenas[] = {" Esta es la cadena 1", " Esta es la cadena 2", " Esta es la cadena 3",
                      " Esta es la cadena 4"};  //declaro una matriz de cadenas de texto

void setup() {
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < 4; i++) { //imprimo todas las cadenas de la matriz
    Serial.println(miscadenas [i]);
    delay(500);
  }
}

Ejercicios

 Ejercicio 1: Consultar una matriz de números

Crear una matriz de 6 variables tipo int, asignarle los valores 10, 20, 30, 40, 50 y 60. Y luego imprimir estos valores en el monitor serie usando un lazo “for”.

 Ejercicio 2: Consultar una matriz de caracteres

Crear una matriz de caracteres que contenga el mensaje “Hola mundo”, e imprimir está en el monitor serie.

Ejercicio 3: Guardar y consultar valores

Hacer un programa que capture 6 valores enteros desde el pin A0, los guarde en una matriz, y luego imprima los valores de la matriz en el monitor serie.

Ejercicio 4: Juego de luces

Probar el sketch del ejemplo 2. Podemos hacer alguna variación? Probemos algunas.

Ejercicio 5: Adivinador

Crear matriz con seis o mas mensajes diferentes que sirvan para responder una pregunta (por ejemplo: Si, No, Quizás, Nunca, Siempre, algunas veces, etc).  Conectaremos también un pulsador a la entrada digital 2. Cada vez que presionemos el pulsador aparecerá en el monitor serie uno de los mensajes de forma aleatoria. Y de esta forma habremos creado un adivinador, haremos una pregunta y al pulsar el botón este nos dará una respuesta. Para generar el numero aleatorio usar la función random().

Deja una respuesta