Matriz LED con Joystick DC
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
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); } }