22jul/100
Arduino y un joystick II. Moverse en una matriz.
Aumentamos el numero de leds, la matriz es de 4x4, pero casi todo es igual al anterior (ahora hay mas leds, un transistor mas... y 2 cables
).
Lo que hace este sketch es mover el led encendido en la matriz, podemos seleccionar el led que queremos esté encendido.
Aqui teneis el video:
Aquà os pongo el codigo:
// Declaramos los puertos que corresponden a filas y // columnas como una matriz int aLed[2][4]={{2, 3, 4, 5}, {9, 8, 7, 6}}; // Declaramos los potenciometros que controlan los // 2 ejes del joystick en el puerto analogico que // corresponda. el formato del array es //           {fila, columna} int anPot[] = {1, 0}; // Creamos una variable para guardar la posición del // led encendido int iLedOn [] = {0, 0}; void setup (){   Serial.begin (9600);   for (int i=0; i < 4; i++){ // Por comodidad...     pinMode (aLed [0] [i], OUTPUT);     pinMode (aLed [1] [i], OUTPUT);   }   // Encendemos el primer led de la matriz   digitalWrite (aLed [0] [0], HIGH);   digitalWrite (aLed [1] [0], HIGH); } void OnLed (int *iLed){   // Ahora sabemos que led está encendido...   // ya no necesitamos el for, pero nos quedamos   // con el para hacer mas cosas:   // apagamos la entrada, encendemos la nueva y   // la guardamos en la variable iLedOn   for (int i=0; i < 2; i++){     // este if es solo para no hacer nada, cuando     // no hay que hacer nada...     if (iLed [i] < 4){       // Apagamos la entrada vieja...       digitalWrite (aLed [i] [iLedOn [i]], LOW);       // Encendemos la nueva...       digitalWrite (aLed [i] [iLed [i]], HIGH);       // y guardamos.       iLedOn [i] = iLed [i];     }   } } void loop (){   int iVal[2];   int iLed[2]= {0, 0};   iVal [0] = analogRead (anPot [0]);   iVal [1] = analogRead (anPot [1]);   // Toca transformar los 10 bits a columnas y filas.   for (int i=0; i < 2; i++){     // Vamos a poner valores altos (100 y 900) para     // no tener que preocuparnos por las diagonales     // El joystick nos va a permitir movernos por la     // matriz, asà que solo nos va a interesar los     // valores extremos arriba, abajo, derecha     // e izquierda     if (iVal [i] > 700){       // Aumentamos la posicion, salvo que este       // en el extremo (iLedOn[i]=3)       // Si no pongo este else hace el bucle,       // que no es lo que busco.       if ( iLedOn [i] != 3)         iLed [i] = iLedOn [i] + 1;       else iLed [i] = 4;     }     else if (iVal [i] < 300){       // Lo mismo pero ahora restamos y no hacemos       // nada para iLedOn=0       if ( iLedOn [i] != 0)         iLed [i] = iLedOn [i] - 1;       else iLed [i] = 4;     }     else iLed [i] = 4;     Serial.println (iLedOn [i]);   }   OnLed (iLed);   // este delay es para poder manejar el joystic   // sin problemas   delay (175); }
Comentarios (0)
Trackbacks (0)
( suscribirse a los comentarios de esta entrada )
Aún no hay trackbacks.
