Diferència entre revisions de la pàgina «Matriz LED con Joystick DC»

De Wiket
Salta a la navegació Salta a la cerca
(Es crea la pàgina amb «El proyecto consiste en hacer mover un led de la matriz a través del Joystick, en el anterior articulo hemos comentado que es el joystick y como se mapea. ==Material...».)
 
 
Línia 11: Línia 11:
  
 
==Codigo==
 
==Codigo==
 +
Este es el código que hemos utilizado para poder mover un led en la matriz led a través del joystick. <br>
 +
<pre>
 +
 +
// Creacion de un vector con los pines de las hileras
 +
const int row[8] = {
 +
  2, 7, 19, 5, 13, 18, 12, 16
 +
};
 +
 +
// Creacion de las variables
 +
int sensorX, sensorY;
 +
bool stateX=true;
 +
bool stateY=true;
 +
 +
// Creacion de un vector con los pines de las columnas
 +
const int col[8] = {
 +
  6, 11, 10, 3, 17, 4, 8, 9
 +
};
 +
 +
// Creacion de una matriz de 8x8
 +
int pixels[8][8];
 +
 +
// Posicion inicial del cursor
 +
int x = 4;
 +
int y = 4;
 +
 +
void setup() {
 +
  // Inicializa los pines de entrada/salida como pines de salida
 +
  for (int thisPin = 0; thisPin < 8; thisPin++) {
 +
    // Inicializamos los pines de salida
 +
    pinMode(col[thisPin], OUTPUT);
 +
    pinMode(row[thisPin], OUTPUT);
 +
    // Nos aseguramos de que los pines de las columnas estan apagados
 +
    digitalWrite(col[thisPin], HIGH);
 +
  }
 +
 +
  // inicializa los pixels de la matriz:
 +
  for (int x = 0; x < 8; x++) {
 +
    for (int y = 0; y < 8; y++) {
 +
      pixels[x][y] = HIGH;
 +
    }
 +
  }
 +
}
 +
 +
void loop() {
 +
  // Lee las entradas
 +
  readSensors();
 +
  // Enciende/Apaga la matriz
 +
  refreshScreen();
 +
 +
 
 +
}
 +
 +
void readSensors() {
 +
 +
  // Apaga la ultima posicion de la matriz
 +
  pixels[x][y] = HIGH;
 +
 
 +
  // Leemos las entradas del joystick
 +
  sensorX = analogRead(0);
 +
  sensorY = analogRead(1);
 +
 
 +
  // Comprovamos los valores de X e Y del joystick y dependiendo de sus valores moveremos el led
 +
  // El led va una posicion hacia la izquierda
 +
  if(sensorX<=80 && x>0 && stateX){
 +
    x=x-1;
 +
    stateX=false;
 +
  }
 +
  // El led va una posicion hacia la derecha
 +
  else if(sensorX>=950 && x<7 && stateX){
 +
    x=x+1;
 +
    stateX=false;
 +
  }
 +
  else if(sensorX>400 && sensorX<600 ){
 +
    stateX=true;
 +
  }
 +
 
 +
  // El led va una posicion hacia arriba
 +
  if(sensorY<=80 && y<7 && stateY){
 +
    y=y+1;
 +
    stateY=false;
 +
  }
 +
 
 +
  // El led va una posicion hacia abajo
 +
  else if(sensorY>=950 && y>0 && stateY){
 +
    y=y-1;
 +
    stateY=false;
 +
  }
 +
  else if(sensorY>400 && sensorY<600 ){
 +
    stateY=true;
 +
  }
 +
 
 +
 +
  pixels[x][y] = LOW;
 +
 +
}
 +
 +
void refreshScreen() {
 +
  // Itera sobre als filas
 +
  for (int thisRow = 0; thisRow < 8; thisRow++) {
 +
    // Pone el HIGH el pin de las filas
 +
    digitalWrite(row[thisRow], HIGH);
 +
    // Itera sobre las columnas
 +
    for (int thisCol = 0; thisCol < 8; thisCol++) {
 +
      // Nos devuelve el estado del pixel
 +
      int thisPixel = pixels[thisRow][thisCol];
 +
      // Cuando la fila esta en HIGH i la columna en LOW, el led que coincida se enciende
 +
      digitalWrite(col[thisCol], thisPixel);
 +
      // Apaga el pixel
 +
      if (thisPixel == LOW) {
 +
        digitalWrite(col[thisCol], HIGH);
 +
      }
 +
    }
 +
    // Apaga todos los pines de una hilera para apagar todos los leds
 +
    digitalWrite(row[thisRow], LOW);
 +
  }
 +
}
 +
</pre>

Revisió de 14:39, 30 maig 2016

El proyecto consiste en hacer mover un led de la matriz a través del Joystick, en el anterior articulo hemos comentado que es el joystick y como se mapea.

Material Necesario

  • Placa Arduino Uno
  • Joystick
  • Matriz LED
  • Protoboard
  • Cables

Esquema

FritzArd.png

Codigo

Este es el código que hemos utilizado para poder mover un led en la matriz led a través del joystick.


// Creacion de un vector con los pines de las hileras
const int row[8] = {
  2, 7, 19, 5, 13, 18, 12, 16
};

// Creacion de las variables
int sensorX, sensorY;
bool stateX=true;
bool stateY=true;

// Creacion de un vector con los pines de las columnas
const int col[8] = {
  6, 11, 10, 3, 17, 4, 8, 9
};

// Creacion de una matriz de 8x8
int pixels[8][8];

// Posicion inicial del cursor
int x = 4;
int y = 4;

void setup() {
  // Inicializa los pines de entrada/salida como pines de salida
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    // Inicializamos los pines de salida
    pinMode(col[thisPin], OUTPUT);
    pinMode(row[thisPin], OUTPUT);
    // Nos aseguramos de que los pines de las columnas estan apagados
    digitalWrite(col[thisPin], HIGH);
  }

  // inicializa los pixels de la matriz:
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      pixels[x][y] = HIGH;
    }
  }
}

void loop() {
  // Lee las entradas
  readSensors();
  // Enciende/Apaga la matriz
  refreshScreen();

  
} 

void readSensors() {

  // Apaga la ultima posicion de la matriz
  pixels[x][y] = HIGH;
  
  // Leemos las entradas del joystick
  sensorX = analogRead(0);
  sensorY = analogRead(1);
  
  // Comprovamos los valores de X e Y del joystick y dependiendo de sus valores moveremos el led
  // El led va una posicion hacia la izquierda
  if(sensorX<=80 && x>0 && stateX){
    x=x-1;
    stateX=false;
  }
  // El led va una posicion hacia la derecha
  else if(sensorX>=950 && x<7 && stateX){
    x=x+1;
    stateX=false;
  }
  else if(sensorX>400 && sensorX<600 ){
    stateX=true;
  }
  
  // El led va una posicion hacia arriba
  if(sensorY<=80 && y<7 && stateY){
    y=y+1;
    stateY=false;
  }
  
  // El led va una posicion hacia abajo
  else if(sensorY>=950 && y>0 && stateY){
    y=y-1;
    stateY=false;
  }
  else if(sensorY>400 && sensorY<600 ){
    stateY=true;
  }
  

  pixels[x][y] = LOW;

}

void refreshScreen() {
  // Itera sobre als filas
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // Pone el HIGH el pin de las filas
    digitalWrite(row[thisRow], HIGH);
    // Itera sobre las columnas
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // Nos devuelve el estado del pixel 
      int thisPixel = pixels[thisRow][thisCol];
      // Cuando la fila esta en HIGH i la columna en LOW, el led que coincida se enciende
      digitalWrite(col[thisCol], thisPixel);
      // Apaga el pixel
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // Apaga todos los pines de una hilera para apagar todos los leds
    digitalWrite(row[thisRow], LOW);
  }
}