¿Que te parecio mi blog?

martes, 25 de julio de 2017

Controlando el movimiento del LED con Joystick

Lo que necesitamos para realizar la práctica fue un joystick, con él se produjeron conexiones con la matriz y el Arduino. Primero se coordinó que los leds se mueva en las direcciones que daba el joystick, es decir que se mueva un espacio cada vez que se movía el joystick y el led de la matriz iba en la dirección que este lo indicara. Con la  Matriz 8x8 conectado al Arduino Mega y el uso del Joystick, se modificó el código base para que el movimiento del Led sea automática de tal manera que parta de un led específico y se mueva a la derecha solo y cuando mueva el control arriba, abajo, derecha o izquierda cambie de dirección. Cabe mencionar que si va a la derecha y el control lo posiciono a la derecha no deberá pasar nada y continuar.
 Para eso se necesitó la siguiente programación:
int ladoy = A0;
int ladox = A1;

int valor1;
int valor2;

int posX = 5;
int posY = 13;

void setup() {
  Serial.begin(9600);
  //PINES DEL 2 AL 19 COMO SALIDA  
  for (int j = 2; j <= 17; j++)
    pinMode(j, OUTPUT);

  //APAGO LOS PINES LOS POSITIVOS LES MANDO LOW Y LOS NEGATIVOS LES MANDO HIGH
  for (int j = 2; j <= 9; j++)
    digitalWrite(j, LOW);

  for (int j = 10; j <= 17; j++)
    digitalWrite(j, HIGH);

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

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) {
    if (posX == 9)
      posX = 2;
    else
      posX++;//posX = posX + 1;
  } else {
    if (valor1 < 400) {
      if (posX == 2)
        posX = 9;
      else
        posX--;//posX = posX - 1;
    }
  }

  if (valor2 > 700) {
    if (posY == 17)
      posY = 10;
    else
      posY++;
  } else {
    if (valor2 < 400) {
      if (posY == 10)
        posY = 17;
      else
        posY--;
    }
  }
  digitalWrite(posX, HIGH);
  digitalWrite(posY, LOW);
 
  delay(250);
}



jueves, 22 de junio de 2017

BITACORA 2: Programacion del Arduino

 BASICA
La matriz era  positivo comun. Se usaron 8 resistencias y seis cables, protoboard
usando la tabla que nos dejo el mister en la practica uno de la matriz reaalizamos las conexiones con el codigo usado, realizamos la primera forma que era la basica de lineas en filas. Su conexion fue sencila. No fue dificil saber que pin  de arduino se conecta a pin de la matriz de 8x8.





PROGRAMACION
void setup() {
    for (int j=2; j<19; j++)
      pinMode(j, OUTPUT);
}

void loop() {
    for (int j=2; j<10; j++) {
      digitalWrite(j, HIGH);     //Levantamos la columna
      for (int k= 10 ; k<18 ; k++) {
        digitalWrite(k, LOW);   //Encendemos el punto
        delay(250);
        digitalWrite(k, HIGH);  //Apagamos el punto
       }
       digitalWrite(j, LOW);   //Bajamos la columna
   }
}


CUADRADO
Modificammos el codigo usanod la funcion Loop y lo hicimos para que se forma un cuadrado prendiendo basicamente las filas y las columnas primeras y ultimas. El loop nos ayudo para que se repita y  continue. En pocas palabras consistia en prender los bordes, led por led formando un cuadrado. Se tenia que poner positivo= High y negativo= low para que de esta  manera se encienda y colocar Negativo=high y positivo=low para que se logre apagar.




PROGRAMACION
void setup() {
    for (int j=2; j<19; j++)
      pinMode(j, OUTPUT);
}

void loop() {
    for (int j=2; j<3; j++) {
      digitalWrite(j, HIGH);     //Levantamos la columna
      for (int k= 10 ; k<18 ; k++) {
        digitalWrite(k, LOW);   //Encendemos el punto
        delay(100);
        digitalWrite(k, HIGH);  //Apagamos el punto
       }
       digitalWrite(j, LOW);   //Bajamos la columna
   }
   for (int j=3; j<10; j++) {
      digitalWrite(j, HIGH);     //Levantamos la columna
      for (int k= 17 ; k<18 ; k++) {
        digitalWrite(k, LOW);   //Encendemos el punto
        delay(100);
        digitalWrite(k, HIGH);  //Apagamos el punto
       }
       digitalWrite(j, LOW);   //Bajamos la columna
}
for (int j=9; j<10; j++) {
      digitalWrite(j, HIGH);     //Levantamos la columna
      for (int k= 16 ; k>9 ; k--) {
        digitalWrite(k, LOW);   //Encendemos el punto
        delay(100);
        digitalWrite(k, HIGH);  //Apagamos el punto
       }
       digitalWrite(j, LOW);   //Bajamos la columna
}
for (int j=8; j>2; j--) {
      digitalWrite(j, HIGH);     //Levantamos la columna
      for (int k= 10 ; k<11 ; k++) {
        digitalWrite(k, LOW);   //Encendemos el punto
        delay(100);
        digitalWrite(k, HIGH);  //Apagamos el punto
       }
       digitalWrite(j, LOW);   //Bajamos la columna
}
}

CRUZADA
Este el mismo pero en vez son la laterales
Ya no teniamos que prender el de arriba sino que lo modificamos para que se prenda de cada fila el Led de forma diagonal prendiendo de  cada fila y columna un foco de  manera especifica para que salga la X. Lo mas dificil fue la programacion al identificar las filas y columnas y modificar su velocidad
Se comienza een un borde que pasa por en medio, asi mismo se repite por la otra esquina dando forma de un reloj de arena. En este proceso vimos una relacion de inversa ya que los negativas eran mas postivos mas 8.


PROGRAMACION
void setup() {
  for (int j = 2; j < 18; j++)
    pinMode(j, OUTPUT);

  for (int j = 2; j < 10; j++) {
    digitalWrite(j, LOW);
  }
  for (int j = 10; j < 18; j++) {
    digitalWrite(j, HIGH);
  }
}
void loop() {
  digitalWrite(2, HIGH);
  for (int k = 17 ; k > 9 ; k--) {
    digitalWrite(k, LOW);
    delay(250);
    digitalWrite(k, HIGH);
  }
  digitalWrite(2, LOW);

  for (int k = 10 ; k < 18  ; k++) {
    digitalWrite(k, LOW);
    digitalWrite(k - 8, HIGH);
    delay(250);
    digitalWrite(k - 8, LOW);
    digitalWrite(k, HIGH);
  }

  digitalWrite(9, HIGH);
  for (int k = 17 ; k > 9 ; k--) {
    digitalWrite(k, LOW);
    delay(250);
    digitalWrite(k, HIGH);
  }
  digitalWrite(9, LOW);

  int a = 1;
  for (int k = 9 ; k >=2  ; k--) {
    digitalWrite(k, HIGH);
    digitalWrite(k + a, LOW);
    delay(250);
    digitalWrite(k, LOW);
    digitalWrite(k + a, HIGH);
    a = a + 2;
  }
}