Diferència entre revisions de la pàgina «Matriz LED con Joystick DC»
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...».) |
(→Codigo) |
||
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
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); } }