jueves, 14 de noviembre de 2013

Arduino - Arrays

Arrays

A diferencia de las variables (comunes) que solo pueden almacenar un valor único a la vez, y cada vez que se le asigna un nuevo valor se le borra el anterior, los arrays son un caso especial de variables que pueden almacenar un conjunto de valores, y modificar solo uno, o algunos, o incluso todos los valores contenidos en el mismo en cualquier momento y según nuestra conveniencia. También sería posible evitar el uso de arrays, y en vez de ello crear ‘muchas’ variables (comunes) con distintos nombres; pero esto en algunos casos no resultará cómodo para utilizar.
La traducción de array es literalmente ‘colección’, ya que se utiliza para ‘juntar’ varios objetos de un mismo tipo. En otras materias, como matemáticas, se conoce con el nombre de Matriz (y generalmente se usan las de 2 dimensiones, por su facilidad para representarlas en un plano, ya que tienen ancho y alto (lo mismo que un plano) y cada elemento de la matriz se identifica por un par de números que indican la fila y la columna en que se ubica el elemento. También podría tener la matriz 3 dimensiones (cubo) y en ese caso cada elemento de la matriz se identificará con 3 valores ordenados (que indicaran la posición relativa del elemento dentro de la Matriz), x ej: A(1,8,76) habría que encontrarlo dentro de la matriz A, en la fila 1, columna 8, “nivel” o “capa” 76.

En el caso de Arduino es todavía más simple; ya que utilizaremos un caso de matriz de una sola dimensión (en este caso se llama vector) , aunque es el mismo término que se utiliza en física para representar magnitudes (definida por su módulo (o longitud), su dirección (u orientación) y su sentido (que distingue el origen del extremo)) en el caso de la informática un vector es “una zona de almacenamiento continuo, que contiene una serie de elementos del mismo tipo y solo sería posible conocer su módulo o longitud, pero no tienen en este caso los vectores dirección (orientación) {Es decir que da igual si se representan de manera horizontal, vertical u oblicua} ni tienen un sentido definido {es decir que da lo mismo recorrerlos de cualquier extremo al otro}

Finalmente (y llevado a la práctica) se podría definir (declarar) en Arduino un array o vector de las siguientes formas:


  int myInts[6];
//se define que tendrá 6 elementos aunque todavía esta ‘vacía’)
  int myPins[] = {2, 4, 8, 3, 6};
//se define la colección de valores numéricos enteros (la longitud  queda implícita)
  int mySensVals[6] = {2, 4, -8, 3, 2};
//igual al anterior, pero con algún entero negativo, y con un tamaño (longitud) predefinido,
  char message[6] = "hola";
//en vez de números almacena caracteres individuales (y arma una palabra!)


Los Arrays o vectores son zero indexed, esto significa que, al referirse a una matriz o vector, el primer elemento de la matriz está en el índice 0. Por lo tanto:
mySensVals[0] == 2, mySensVals[1] == 4, y sucesivos.

Esto también significa que en una matriz con 10 elementos, el índice 9 es el último elemento. Por lo tanto:
int myArray[10]={9,3,2,4,3,2,7,8,9,11};
     // myArray[9]    contiene 11
     // myArray[10]   es invalido y contiene información aleatoria (de otra dirección de memoria)     

                Para mayor información y ejemplos ver la fuente: http://arduino.cc/es/Reference/Array


Consigna

1. Escribir un programa en Arduino que genere 60 números aleatorios en un minuto y los almacene en un vector. Al finalizar la generación de números, deberá mostrar la lista de números generados en el Monitor Serial.2.    Construir un dado virtual con 7 leds y un pulsador, para que al presionar el pulsador se genere una secuencia aleatoria para ‘lanzar el dado’ y a continuación quede fijo el número aleatorio que corresponda al dado. Ejemplo en youtube: ‘Arduino led dice’ by  Eddie Maas http://www.youtube.com/watch?v=bVJLSnqbyEc






Antecedentes:
Analizar los programas de ejemplos: Button (http://arduino.cc/es/Tutorial/Button)

Punto Extra: Modificar el dado (y el programa) , para que en vez de usar 7 salidas digitales para los leds, mantenga el mismo funcionamiento pero con solo 4 salidas digitales.