Arreglos bidimensionales

En esta lección aprenderás a utilizar arreglos bidimensionales para almacenar y manipular datos del mismo tipo en la resolución de problemas.

Cuando para solucionar un problema es necesario el registro de datos en tablas, éstas se pueden representar dentro de un programa con arreglos bidimensionales.

¿Qué es un arreglo bidimensional?

Es una colección ordenada de elementos colocados en filas y columnas. Los  elementos almacenados son referenciados utilizando dos índices: el índice de la fila y el índice de la columna. 

Los arreglos bidimensionales son conocidos como matrices. En la vida cotidiana los conocemos como tablas compuestas por renglones o filas y columnas. En la Figura 1 puedes observar la una representación gráfica de un arreglo bidimensional.

Figura1. Representación de un arreglo bidimensional

Un arreglo bidimensional se compone de los siguientes elementos:

  • Nombre del arreglo o matriz.  Es el nombre que se le asigna al arreglo bidimensional, como el nombre de una variable.
  • Elementos. Cada uno de las datos almacenados que componen el arreglo bidimensional.
  • Celda. Cada uno de los espacios de almacenamiento.
  • índice filas. El número de cada celda que forma la fila del arreglo. Comienza con el número 0.
  • Índice columnas. El número de cada celda que forma una columna del arreglo. Comienza con el número 0.

En un arreglo bidimensional, cada elemento  tiene una posición que se identifica mediante dos índices: el de su fila y el de su columna.

Declaración de arreglos bidimensionales

En Arduino la declaración de un arreglo bidimensional se realiza indicando entre corchetes [ ] las dimensiones de las filas y de las columnas de la siguiente manera:

Sintaxis

tipoDato nombreArreglo [númeroFilas] [númeroColumnas];

Ejemplo

Declaración de un arreglo bidimensional de 8X8 que almacena los colores de una imagen.  

int imagen[8][8];

Declaración de un arreglo  de 4X3 que almacena valores numéricos reales de las variaciones de voltaje.

float voltaje[4][3];

Declaración e inicialización 

Al igual que un arreglo unidimensional, una matriz se puede inicializar al momento de hacer su declaración:

Sintaxis

int matriz[númeroFilas][númeroColumnas] = { {elemento1,elemento2,…} , {…} };

Ejemplo:

Observa en la Figura 2 la declaración e inicialización de una matriz en una sola instrucción.

Figura 2. Declaración e inicialización de una matriz

Otra forma de hacer la inicialización es acomodar los valores de forma vertical para identificar visualmente las filas y las columnas de la matriz.

int matriz = { {1,2,0};
{3,4,1};
{0,4,2};
{9,5,4}};

Acceso a  los valores 

Durante la ejecución de un programa, para acceder a elemento de un arreglo bidimensional se requiere especificar la posición que ocupa haciendo uso de los dos índices,  uno que indica la fila y otro para indicar la columna, cada uno entre corchetes [ ].  Tanto para asignar algún valor como para la lectura, se hace uso de la siguiente sintaxis:

Sintaxis

nombreMatriz[índiceFila] [índiceColumna]

Parámetros

nombreMatriz –  Nombre del arreglo bidimensional

índiceFila – El número de  fila de la celda que guarda el valor

índiceColumna – El número de  columna de la celda que guarda el valor

Los siguientes ejemplos de asignación de valores en una matriz tomando como base la matriz de la figura 2.:

int matriz[4][3]; // Se declara el  arreglo bidimensional
valSensor[0][0] = 1; // se asigna el valor 1 en la fila 0, columna 0
valSensor[3][0] = 9; // se asigna el valor 9 en la fila 3, columna 0
valSensor[2][1] = 4; // se asigna el valor 4 en la fila 2, columna 1

Los siguientes ejemplos son de recuperación o lectura de valores tomando como base la matriz de la Figura 2:

int matriz = { {1,2,0}; {3,4,1}; {0,4,2}; {9,5,4}};
int valor1 = matriz[0][2]; // Se recupera y asigna el valor 0 a la variable valor1
int valor2 = lecturas[2][2]; // Se recupera y asigna el valor 2 a la variable valor2

Recorrido de un arreglo bidimensional

En un arreglo  bidimensional se puede accesar a todos los elementos realizando un recorrido por los elementos de cada fila como lo muestra la Figura 3. 

Figura 3. Recorrido de un arreglo bidimensional por cada fila

El recorrido consiste en accesar a cada elemento de una fila, cuando termina, continúa  con la fila siguiente y así sucesivamente hasta recorrer la última fila. Para hacer el barrido se utiliza la  técnica de ciclos anidados que permite recorrer las dos dimensiones del arreglo. Se utiliza un for para recorrer cada fila,  y dentro del ciclo otro for  para recorrer cada columna de las filas. 

En el siguiente ejemplo se realiza el barrido del arreglo bidimensional y se imprimen cada uno de los valores 

// Recorrido de una arreglo bidimensional 

int
fila; //Declara la variable fila para manejar el índice de la fila
int columna; //Declara la variable columna para manejar el índice de la columna
for (fila = 0; fila<totalFila; fila ++) { // for recorre cada fila
for (columna=0; columna<totalColumna; columna++) { // for recorre la columna
Serial.print (matriz[fila][columna]); //Imprime el valor en de matriz
}
}

Ahora que hemos revisado la declaración, inicialización y manipulación de arreglos bidimensionales, vamos a realizar el siguiente ejemplo:

Se desea programar un circuito electrónico que despliegue los números del 0 al 9  en un display de 7 segmentos, utilizando un arreglo bidimensional  para el almacenamiento de los segmentos del display que deben ser iluminados. (Figura 4). 

Figura 4 . Conexión de un led de 7 segmentos a la tarjeta Arduino UNO

Para crear este circuito vamos a explicar cómo funciona un display de 7 segmentos 

Display de 7 segmentos

Es un dispositivo opto-electrónico formado por leds que permite visualizar números del 0 al 9.  Cada led es un segmento  del display  y está identificado  por una letra (a,b,c,d,e,f,g y p para el punto decimal) como lo muestra la figura 5. 

Figura 5. Display de 7 segmentos

Existen dos tipos de display y se caracterizan por la forma de conexión 

  • Anodo común: todos los leds (segmentos) comparten el mismo ánodo (V+) y cada led tiene su propio cátodo.  Los segmentos se iluminan con valor lógico 0 (0V en el cátodo) y se apagan con valor lógico 1 (V+).
  • Cátodo común : Todos los leds (segmentos) comparten el mismo cátodo (0V) y cada led tiene su propio ánodo. Los segmentos se iluminan con valor lógico 1 (V+ en el ánodo) y se apagan con valor lógico 0 (0V):

Observa el siguiente video para aprender a encender el  display de 7 segmentos:

Tabla de encendido del display de 7 segmentos

Para nuestro circuito utilizaremos de cátodo común,  es decir, que tiene un pin común conectado a los negativos de los LED’s (cátodo) y para generar los números, se debe asignar el valor 1 (voltaje positivo ) al segmento que se requiere encender para formar un número.

Como observaste  en el video,  para formar el número 1 se requiere encender el segmento b y c del display, asignando el valor 1 (ON),   y apagar los segmentos a,d,e,f, g y p asignando el valor  0  (OFF). En la siguiente tabla (figura 6) se muestran los valores lógicos que cada segmento debe tener para formar  y desplegar  el número  de la primera columna:

Figura 6. Tabla de valores por segmento para el display

Ahora que comprendimos cómo funciona el  display de 7 segmentos,  en la programación del circuito declaramos un  arreglo bidimensional y lo inicializamos con  los valores de cada segmento de acuerdo a  la tabla de la figura 7.

 byte Digitos[10][8] = // Declaración de la matriz con los valores de cada segmento 
{ // del display de 7 segmentos
{ 1,1,1,1,1,1,0,0 }, // 0
{ 0,1,1,0,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1,0 }, // 2
{ 1,1,1,1,0,0,1,0 }, // 3
{ 0,1,1,0,0,1,1,0 }, // 4
{ 1,0,1,1,0,1,1,0 }, // 5
{ 1,0,1,1,1,1,1,0 }, // 6
{ 1,1,1,0,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1,0 }, // 8
{ 1,1,1,0,0,1,1,0 } // 9
};

El display estará conectado a los pines del  5 al 11 de la tarjeta Arduino,  y enviará al led que se requiera encender el valor HIGH (1)  y LOW (0) para apagarlo, entonces debemos configurar cada pin de salida. Utilizando un ciclo para indicar las instrucciones  de configuración del pin 5 al 11 quedaría el código como sigue:  

 int pinLed;
for
(pinLed = 5; pinLed<=12; pinLed++)
{ pinMode(pinLed, OUTPUT); }

Para generar  los números del 0 al 9 se debe hacer un  recorrido de los valores de la matriz Digitos[ ][ ] y  encender los segmentos del display.  Utilizamos ciclos anidados  e indicamos cuál segmento se debe encender con la instrucción digitalWrite como se muestra:

for (i=0; i<=9; i++) //Ciclo para recorrer las filas de la matriz Digitos[][]
{
for ( j= 0 ; j<8 ; j++) //Ciclo para recorrer las columnas de la matriz Digitos[][]
{ pinLed = j+5; // Se asigna a pinLed el pin a encender
digitalWrite(pinLed,Digitos[i][j]); //Enciende el LED con el valor de [i][j]
}
delay(1000);
}

Con este ejercicio ponemos en práctica la declaración, inicialización, acceso y recorrido de un arreglo bidimensional.

Manos a la obra

Armando Circuitos

Ahora que ya conoces cómo utilizar el display de 7 segmentos y el uso de los arreglos bidimensionales, vamos a realizar una práctica que consiste en la construcción y programación de un circuito electrónico que encienda en un display de 7segmentos los números dígitos, es decir  del 0 al 9.

Materiales

Los materiales necesarios para realizar la práctica son los siguientes:

Para que comprendas mejor las conexiones y el funcionamiento del circuito electrónico que vas a crear, primero explicaremos cómo trabaja un display de 7 segmentos . Los otros materiales ya los hemos utilizado en prácticas anteriores de este manual, si no te acuerdas o deseas repasar las características técnicas y funcionamiento de alguno de los componentes electrónicos, puedes dar clic sobre su imagen para consultar su información. 

Cómo conectar el display de  7 segmentos

Cómo vimos anteriormente un display de 7 segmentos es un dispositivo opto-electrónico formado por leds que permite visualizar números del 0 al 9.En el siguiente video te explicamos cómo se debe conectar el display. 

Conexión del Display de 7 segmentos

Construcción del circuito electrónico

Realiza las conexiones del circuito electrónico que se muestra en el diagrama esquemático de la Figura 7. Recuerda que  cada terminal del display va conectado a una  resistencia y el  cátodo común  a la tierra

Figura 7 Diagrama esquemático del circuito electrónico con un display de 7 segmentos

Programación del circuito electrónico

Captura el código del programa en el IDE de Arduino.  Procura hacerlo tu mismo para conseguir un aprendizaje de la codificación de las instrucciones.  

/* Manual de programación con Arduino
* Práctica: Uso de arreglos bidimensionales
* Objetivo: Programa que despliega contador del 0 al 9
* con un led de 7 segmentos
* Fecha: noviembre 2020
* Autor: Milagros Pacheco Castañeda
*/
byte Digitos[10][8] = // Declaramos el arreglo bidimensional con los valores
{ // para encender los segmentos del led
{ 1,1,1,1,1,1,0,0 }, // 0
{ 0,1,1,0,0,0,0,0 }, // 1
{ 1,1,0,1,1,0,1,0 }, // 2
{ 1,1,1,1,0,0,1,0 }, // 3
{ 0,1,1,0,0,1,1,0 }, // 4
{ 1,0,1,1,0,1,1,0 }, // 5
{ 1,0,1,1,1,1,1,0 }, // 6
{ 1,1,1,0,0,0,0,0 }, // 7
{ 1,1,1,1,1,1,1,0 }, // 8
{ 1,1,1,0,0,1,1,0 } // 9
};

int i; // Declaramos i para llevar el índice de las filas
int j; // Declaramos j para llevar el índice de las columnas
int pinLed; // Declaramos variable pinLed para manejar los pines

void
setup()
{ // Configuramos los pines 5 a 12 de la placa Arduino como salida
for (pinLed = 5; pinLed<=12; pinLed++)
pinMode(pinLed, OUTPUT);
}

void loop()
{
// for anidados para recorrer la matriz Digitos
for (i=0; i<=9; i++) // Recorre las filas
{
for ( j= 0 ; j<8 ; j++) // Recorre las columnas
{ pinLed = j+5; // Se asigna a pinLed el pin a trabajar
digitalWrite(pinLed , Digitos[i][j]) ; // Encendemos el segmento del led
}
delay(1000);
}
}

Compila, depura y sube el sketch a la tarjeta Arduino UNO. 

Funcionamiento del circuito electrónico

Prueba el funcionamiento de tu circuito electrónico. Verifica el funcionamiento del circuito, debe ser semejante a la simulación que se muestra a continuación. Presiona el botón Iniciar simulación observa cómo el display enciende los números del 0 al 9. 

Si en tu navegador no se muestra la simulación, ingresa al enlace https://www.tinkercad.com/embed/3WdWN1dpVlY?editbtn=1

logo-autoevaluación

Autoevaluación

Arduino. (2020). Guía de Referencia de Arduino. https://www.arduino.cc/reference/es/

para aprender más

Para aprender más

Prometec (s/f). Display de 7 segmentos. https://www.prometec.net/display-7segmentos/