viernes, 10 de enero de 2020

funcionesMicrobit.ino

En la entrada anterior hemos usado unas cuantas funciones a las que tendremos que recurrir con mucha frecuencia. Vamos a crear, por tanto, un archivo con todas ellas y lo incluiremos, cuando sea necesario, en una nueva pestaña del IDE Arduino:




Ahora sólo tenemos que copiar y pegar el siguiente código:

/* 
 * funcionesMicrobit.ino
 * Conjunto de funciones que podemos usar en nuestros programas.
 */


/*
 * Los pines de las tres filas y 9 columnas de la matriz
 * interna de LEDs
 */
byte pinFilas[3] = {26, 27, 28};
byte pinColumnas[9] = {3, 4, 10, 23, 24, 25, 9, 7, 6};

/*
 * boolean matrizLed[5][5];
 * Vamos a crear una imagen virtual de la matriz de LEDs,
 * para ello utilizamos un array de tipo booleano de dos
 * dimensiones (fila-Columna). 
 * Un 1 es encendido y un 0 apagado.
 */
boolean matrizLed[5][5]={{0,0,0,0,0},
                         {0,0,0,0,0},
                         {0,0,0,0,0},
                         {0,0,0,0,0},
                         {0,0,0,0,0}}; //matrizLed[fila][columna]

/*
 * coorY y coorX son dos array de 3x9 que representan la
 * fila (Y) y columna (X) de cada uno de los LED (matriz de 5x5)
 * en relación con su posición en la matriz interna de 3x9.
 */
byte coorY [3][9] = {{0,0,0,3,3,3,3,3,2},
                     {2,2,2,0,0,4,4,0,0},
                     {4,4,4,1,1,1,1,1,2}};                 
byte coorX [3][9] = {{0,2,4,4,3,2,1,0,1},
                     {4,0,2,1,3,3,1,0,0},
                     {2,4,0,0,1,2,3,4,3}};

byte fila=0;       //la fila actual a encender en el multiplexado.

long millisInicialesLed=0;
long millisInicialesDelay_=0;

/*
 * pinMatrizLedSalidas()
 * Programa como salidas los 3 pines de las filas internas
 * y los 9 pines de las columnas
 */
void pinMatrizLedSalidas(){
  for (byte i=0; i<9; i++){
    pinMode(pinColumnas[i], OUTPUT);
  }
  for (byte i=0; i<3; i++){
    pinMode(pinFilas[i], OUTPUT);
  }
}

/*
 * multiplexaMatrizLed()
 * Cada 6 milisegundos llama a la función
 * multiplexadoFilasLed.
 */
void multiplexaMatrizLed(){
  if (millis() - millisInicialesLed > 6) {
    millisInicialesLed = millis();
    multiplexaFilasLed();
  }
}

/*
 * apagaMatrizLed()
 * Desactiva todos los pines tanto de las tres filas
 * como de las nueve columnas de la matriz de LEDS.
 */
void apagaMatrizLed(){
  for (byte i=0; i<3; i++){
    digitalWrite(pinFilas[i], LOW);
  }
  for (byte i=0; i<9; i++){
    digitalWrite(pinColumnas[i], HIGH);
  }
}

/*
 * multiplexaFilasLed()
 * Primero apaga toda los LEDs y después transfiere los 0 y 1
 * de la matriz virtual a los LEDs correspondiente.
 * Cada vez que se ejecuta (cada 6 mseg)se actualiza una sola
 * de las tres filas internas.
 * Recordamos los pines (fila columna) de los LEDs:
 *  (26-3)  27-23  26-4   27-24 (26-10)
 *   28-23 (28-24) 28-25 (28-9)  28-7
 *   27-4   26-6  (27-10) 28-6   27-3
 *   26-7  (26-9)  26-25 (26-24) 26-23
 *  (28-10) 27-9   28-3   27-25 (28-4)
 */
void multiplexaFilasLed(){
  apagaMatrizLed();
  digitalWrite(pinFilas[fila],HIGH);
  for (byte i=0; i<9; i++){
    digitalWrite(pinColumnas[i], !matrizLed[coorY[fila][i]][coorX[fila][i]]);
  }
  fila++;
  if(fila==3) fila=0;
}

/* 
 * delay_
 * Creamos una función que realiza la temporización utilizando
 * la instrucción millis() y genera un nuevo buble que se sigue
 * ejecutando durante el tiempo que hayamos fijado.
 * La variable millisIniciales está declarada como local dentro 
 * de la función.
 * Para hacer ese buble hemos utilizado la instrucción:
 *     while(condición){  instrucciones }
 * mientras que se cumpla la condición se ejecutan las instruciones
 * que hay entre las llaves.
 * En lugar de incluir entre las llaves todas las instrucciones
 * que necesitemos las colocaremos en una nueva función loop_ 
 * que hay que incluir en nuestro programa.
 */
void delay_(long tiempo){
  long millisInicialesDelay_ = millis();
  while(millis() - millisInicialesDelay_ < tiempo){
    loop_();
  }
}

En la primera pestaña escribiremos nuestros programas y podremos utilizar las funciones que hemos añadido. Al guardarlo aparecererán dos archivos .ino, el del programa y el de las funciones. Una vez que tenemos creado funcionesMicrobit.ino lo podemos incluir en otros programas utilizando la opción "Añadir fichero..." del menú "Programa".

No hay comentarios:

Publicar un comentario