En la entrada anterior ya hicimos un pequeño ejemplo de como se podían visualizar letras y números. Ahora vamos a implementar un array (font) con las imágenes de la mayoría de caracteres ASCII y una función específica (muestraCaracter) para verlos en la matriz de LEDs. Ambos hay que incluirlos en el archivo funcionesMicrobit.ino, el array al principio, donde se declaran las variables, y muestraCaracter con el resto de funciones.
/* font[59][5]
* Array con las imagenes bmp de gran parte de los caracteres ASCII
* Se inician con el espacio en blanco (código ASCII 32) y finalizan
* con la letra Z (código ASCII 91). No hemos incluido
* las letras minúsculas.
*/
byte font[59][5] = {{B00000,B00000,B00000,B00000,B00000}, //espacio
{B00100,B00100,B00100,B00000,B00100}, //!
{B01100,B01100,B00000,B00000,B00000}, //"
{B01010,B11111,B01010,B11111,B01010}, //#
{B01110,B10100,B01100,B00110,B11100}, //$
{B11001,B11010,B00100,B01011,B10011}, //%
{B01100,B10010,B01101,B10010,B01101}, //&
{B00100,B00100,B00000,B00000,B00000}, //'
{B00100,B01000,B01000,B01000,B00100}, //(
{B01000,B00100,B00100,B00100,B01000}, //)
{B00000,B01010,B00100,B01010,B00000}, //*
{B00000,B00100,B01110,B00100,B00000}, //+
{B00000,B00000,B00000,B01000,B01000}, //,
{B00000,B00000,B01110,B00000,B00000}, //-
{B00000,B00000,B00000,B00100,B00000}, //.
{B00001,B00010,B00100,B01000,B10000}, ///
{B01100,B10010,B10010,B10010,B01100}, //0
{B00100,B01100,B00100,B00100,B01110}, //1
{B11100,B00010,B01100,B10000,B11110}, //2
{B11100,B00010,B11100,B00010,B11100}, //3
{B10010,B10010,B01110,B00010,B00010}, //4
{B11110,B10000,B11100,B00010,B11100}, //5
{B01110,B10000,B11100,B10010,B01100}, //6
{B11110,B00010,B00100,B00100,B00100}, //7
{B01100,B10010,B01100,B10010,B01100}, //8
{B01100,B10010,B01110,B00010,B01100}, //9
{B00000,B01000,B00000,B01000,B00000}, //:
{B00000,B01000,B00000,B01000,B01000}, //;
{B00010,B00100,B01000,B00100,B00010}, //<
{B00000,B01110,B00000,B01110,B00000}, //=
{B01000,B00100,B00010,B00100,B01000}, //>
{B11100,B00010,B01100,B00000,B01000}, //?
{B01110,B10001,B10101,B10110,B01100}, //@
{B01100,B10010,B11110,B10010,B10010}, //A
{B11100,B10010,B11100,B10010,B11100}, //B
{B01110,B10000,B10000,B10000,B01110}, //C
{B11100,B10010,B10010,B10010,B11100}, //D
{B01110,B10000,B11110,B10000,B01110}, //E
{B01110,B10000,B11110,B10000,B10000}, //F
{B01110,B10000,B10110,B10010,B01110}, //G
{B10010,B10010,B11110,B10010,B10010}, //H
{B01110,B00100,B00100,B00100,B01110}, //I
{B01110,B00010,B00010,B00010,B11100}, //J
{B10010,B10010,B11100,B10010,B10010}, //K
{B10000,B10000,B10000,B10000,B11110}, //L
{B10001,B11011,B10101,B10001,B10001}, //M
{B10001,B11001,B10101,B10011,B10001}, //N
{B01100,B10010,B10010,B10010,B01100}, //O
{B11100,B10010,B11100,B10000,B10000}, //P
{B01100,B10010,B10010,B01100,B00100}, //Q
{B11100,B10010,B11100,B10010,B10010}, //R
{B01110,B10000,B01100,B00010,B11100}, //S
{B11111,B00100,B00100,B00100,B00100}, //T
{B10010,B10010,B10010,B10010,B01100}, //U
{B10001,B10001,B01010,B01010,B00100}, //V
{B10001,B10001,B10101,B11011,B10001}, //W
{B10001,B01010,B00100,B01010,B10001}, //X
{B10001,B10001,B01110,B01110,B00100}, //Y
{B11110,B00100,B01000,B10000,B11110}}; //Z
La función es bastante sencilla, simplemente utilizamos muestraImagenesBmp y le restamos al código ASCII el número 32, así empezamos en el primer elemento de nuestro array (font).
void muestraCaracter(byte ascii){
muestraImagenBmp(font[ascii-32]);
}
El programa adjunto va mostrando todos los caracteres a intervalos de un segundo.
/* muestraCaraceresAscii.ino
* Visualizamos en la matriz de LEDs los
* primeros 59 caracteres ASCII imprimibles.
*/
void setup() {
pinMatrizLedSalidas();
}
/*
* El número 32 corresponde al primer
* caracter imprimible. El 91 a la
* letra Z, que es la última de nuestro
* array font.
*/
void loop(){
for(byte i=32; i<91; i++){
muestraCaracter(i);
delay_(1000);
}
}
/*
* La función que se está ejecutando mientras
* duran los delay_
*/
void loop_(){
multiplexaMatrizLed();
}
El parámetro que hay que incluir en la función muestraCaracter(parámetro) puede ser el código ASCII numerico o el caracter encerrado entre comilla simple (por ejemplo: muestraCaracter('F')).