Matriz LED con Joystick DC

De Wiket
Salta a la navegació Salta a la cerca

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