miércoles, 9 de agosto de 2017

Controlando el movimiento del LED con Joystick

En esta practica, realizamos con la matriz 8x8 una parte del proyecto de Snake que se dividió en dos fases. La primera fue hacer que un led se prenda y podamos moverlo con el joystick y la segunda fue lograr que el led se mantenga corriendo en la misma dirección aunque se deje de generar el movimiento manualmente.

Para esto empezamos conectando el joystick a nuestro sistema con la matriz y el Arduino de la practica anterior. Conectamos el GND con el GND del Arduino, el Vcc con 5v, y el Vrx y Vry con pies analógicos (Vrx con A0 y Vy con A1). 
Luego continuamos con la programación. Comenzamos creando las variables respectivas para la lectura del movimiento del joystick tanto en x como en y.

int ladoy = A0;
int ladox = A1;


A continuación,creamos dos variables mas que almacenaran los datos dados por ladox y ladoy   respectivamente: 
                          int valor1;
                          int valor2;
Después agregamos cuatro variables booleanas, variables que pueden tener dos estados: verdadero o falso; cuyos valores dependerán de la posición a la que se haya dirigido el joystick la  última vez.
         boolean arriba=true;
         boolean abajo=false;
         boolean derecha=false;
         boolean izquierda=false;

Finalmente creamos las variables posx y posy, las cuales indicaran que LED sera el que se prenda.

En el void setup, declaramos


donde nos podemos dar cuenta que empezamos con la frecuencia (serial.begin) de 9600;   y despues declaramos como output a los pines de 2 a 17 (salida); del 2 al 9 en estado apagado al igual que de 10 a 17 (se escribe HIGH ya que se conoce que el inverso "LOW" se mantenían en estado prendido)
Por consiguiente y final del void setup, colocamos que la posx y posY estan apagadas.

En el void loop colocamos directamente lo que realizara el joystick.

"void loop() {
  valor1 = analogRead(ladox);
  valor2 = analogRead(ladoy);
  Serial.print("X: ");
  Serial.print(valor1);
  Serial.print(" - ");
  Serial.print("Y: ");
  Serial.println(valor2);
  digitalWrite(posX, LOW);
  digitalWrite(posY, HIGH);
  if (valor1 > 700) {
    derecha= true;
    izquierda= false;
    arriba= false;
    abajo= false;
  } else {
    if (valor1 < 400) {
      derecha= false;
    izquierda= true;
    arriba= false;
    abajo= false;
    }
  }

  if (valor2 > 700) {
    derecha= false;
    izquierda= false;
    arriba= true;
    abajo= false;
  } else {

    if (valor2 < 400) {
      derecha= false;
    izquierda= false;
    arriba= false;
      abajo = true;  
    }
  }
    if (derecha) {
    if (posX == 9)
      posX = 2;
    else
 posX++;//posX = posX + 1;
  } else {
    if (izquierda) {
      if (posX == 2)
        posX = 9;
     
      else
        posX--;//posX = posX - 1;
     
    }
  }

  if (arriba) {
    if (posY == 17)
      posY = 10;
    else
      posY++;
  } else {

    if (abajo) {
      if (posY == 10)
        posY = 17;
      else
        posY--;
     
    }
  }

  digitalWrite(posX, HIGH);
  digitalWrite(posY, LOW);

  delay(250);
}"

miércoles, 28 de junio de 2017

Secuencias en Matriz LED 8x8

En esta practica encendimos los led de la matriz de 8x8 siguiendo dos secuencias utilizando Arduino. La primera secuencia consistía en que se enciendan los led de los bordes de las matriz uno por uno.
Para esta secuencia, en nuestra programación comenzamos declarando los pines que íbamos a utilizar en el void setup ; como todos los pines son de salida (OUTPUT) utilizamos un shortcut "for" en el que pusimos una variable j que comienza desde el pin 2 hasta el pin 18. Así reemplazamos el numero del pin por la variable j y podemos declarar todas como output en una sola linea.
Luego nos aseguramos de que las filas y columnas estén apagadas.
En el loop primero encendemos la columna de uno de los bordes y con un "for" vamos encendiendo las filas una por una. Luego volvemos a apagar la columna y repetimos lo mismo tres veces mas con los otros bordes.
La segunda secuencia consiste en hacer un signo de infinito. Para esto, utilizamos el mismo setup de la anterior. En el loop usamos la misma programación para encender la primera columna, luego, para las diagonales, unimos dos "for" de manera que ambas variables, las columnas y filas vayan prendiéndose y apagándose al mismo tiempo mientras avanzan.