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 ​​manualmente, 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