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);
}"