12- Matrices en Arduino


Declaraci贸n de una matriz.

Una matriz es una colecci贸n de variables del mismo tipo a las que se accede utilizando un nombre e 铆ndice comunes, es decir, n煤meros de elementos en la matriz. De hecho, es un conjunto de variables que se nombran por un nombre y tienen n煤meros personales. Para declarar una matriz, basta con especificar corchetes despu茅s del nombre de la variable, el tipo de datos es cualquiera. Puede decirle al compilador el tama帽o de la matriz de dos maneras: mediante un n煤mero expl铆cito entre corchetes, o al declarar, puede asignar inmediatamente un valor a cada celda, luego el compilador contar谩 su n煤mero. Considere un ejemplo de declaraci贸n de una matriz de diferentes maneras:

// especifica la cantidad de celdas y listo, entonces puedes trabajar con ellas
int myInts [ 6 ] ;
// especifica el contenido de las celdas, el compilador contar谩 su n煤mero
int myPins [] = { 2, 4, 8, 3, 6 } ;
// especifica ambos, el n煤mero de celdas en [] debe coincidir con {} o ser mayor.
Float Sens [ 3 ] = { 0.2 , 0.4 , -8.5 } ;
// almacenar s铆mbolos
char message [ 6 ] = "hola" ;

Un punto importante: el tama帽o de la matriz global debe ser especificado por una constante, es decir, un n煤mero espec铆fico, una constante const o constante #define El hecho es que se debe conocer el tama帽o de la matriz global antes de iniciar la ejecuci贸n del programa, porque se asigna desde la memoria y otras variables globales viven junto a ella.

// dimensiones
#define arr1_size 10
const byte arr2_size = 20;
byte arr3_size = 30;
// matrices
int arr0 [ 5 ] ;
int arr1 [ arr1_size ] ;
int arr2 [ arr2_size ] ;
// int arr3 [arr3_size]; // resultar谩 en un error!

El tama帽o de la matriz local (creada dentro de la funci贸n) se puede establecer en una variable, porque la matriz local se asigna desde la pila mientras el programa se est谩 ejecutando, y puede ser de cualquier tama帽o:

void loop () {  
  byte localArr_size = 10;
  int arrLocal [ localArr_size ] ;
}

Referencias a elementos.

Se accede a un elemento de matriz de la misma forma, entre corchetes. Es importante recordar que en programaci贸n, el conteo comienza desde cero y el primer elemento de la matriz es 0 (cero):

/ escribir en la celda 3 de la matriz myPins
// valor del elemento # 0 de la matriz myInts
myPins [ 3 ] = myInts [ 0 ] ;

Matrices multidimensionales.

Arriba, observamos matrices unidimensionales, en las que los elementos se identifican simplemente por el n煤mero ordinal. Tambi茅n puede especificar matrices multidimensionales en las que el elemento tendr谩 varios n煤meros. Por ejemplo, una matriz bidimensional, tambi茅n es una matriz, tambi茅n es una tabla, cada elemento tiene un n煤mero de fila y columna. Una matriz como esta se establece as铆:

/ matriz bidimensional, 5 filas 10 columnas
byte myTable [ 5 ] [ 10 ] ;
// matriz 3x3
byte myMatrix [] [ 3 ] = {
  { 10, 11, 12 } ,
  { 13, 14, 15 } ,
  { 16, 17, 18 } ,
} ;

Es muy importante recordar que al declarar una matriz con datos ingresados 鈥嬧媘anualmente, es necesario especificar el tama帽o del n煤mero de celdas en una dimensi贸n que es 1 menos que la dimensi贸n de la matriz (para una de dos dimensiones, 贸sea aseg煤rese de especificar el tama帽o de una de las dimensiones).

Despu茅s del 煤ltimo miembro de la matriz, puede poner una coma, esto no dar谩 lugar a un error (c贸digo de ejemplo anterior).

En la matriz bidimensional anterior myMatrix el elemento con la direcci贸n 0, 2 (fila 0 columna 2) tiene el valor 12. Una referencia a este elemento, por ejemplo, con el prop贸sito de reescribir, se ver谩 as铆:

// cambia 12 a 20, celda 0.2
myMatrix [ 0 ] [ 2 ] = 20;

Una matriz de tipo cadena (matrices de letras) puede ser muy 煤til, ya que le permite mantener los nombres de los elementos del men煤 u otras cosas similares de forma ordenada. Tal matriz debe declararse usando el operador de direcci贸n * (asterisco):

const char * nombres []   = { 
  "Periodo" ,   // 0
  "Trabajo" ,     // 1
  "Detener" ,     // 2
} ;

Llamar a nombres [ 2 ] mostrar谩 la palabra 芦Detener禄 en el monitor del puerto o en la pantalla, por ejemplo:

// env铆a la palabra Stop al puerto
Serial.println(names[2]);

Pero volveremos a esto en el futuro.

Puede realizar las mismas acciones con elementos de matriz que con variables ordinarias, es decir, todas las matem谩ticas que cubrimos en la lecci贸n anterior, tambi茅n no olvide que una matriz puede ser casi cualquier tipo de datos: entero, fraccional, una matriz de estructuras. El alcance se aplica a las matrices de la misma manera, porque una matriz es un variable ordinaria. 


Deja un comentario