Colorduino controlador de matriz RGB – Mostrar números

Hola, hoy os traigo un codigo para mostrar los números del 1 al 99 en una placa Colorduino con una matriz de LED RGB de 8×8.

Colorduino

Este código permite imprimir un número de dos cifras en un color determinado sobre un fondo determinado, es necesario incluir la librería “colorduino.h“. Para simplificar el programa he declarado las 3 funciones siguientes:

· Fondo(ColorFondo,Respuesta): Coge la matriz int Respuesta[3][8][8] y la “rellena” del color que hemos seleccionado. Para obtener el color lee una matriz int ColorFondo[3]={Rojo,Verde,Azul} Rojo, Verde y Azul serán valores de 0 a 63.

//Funcion fondo RGB MATRIX http://zygzax.com/
void Fondo(int color[3],int out[3][8][8]){
 int f,c,n;
 for(f=0;f<8;f++){
 for(c=0;c<8;c++){
 for(n=0;n<3;n++){
 out[n][f]1=color[n];
 }
 }
 }
}

· Numero(Numero,ColorNumero,Respuesta): Dado un “Numero” entero, lo colorea del color seleccionado en la matriz int ColorNumero[3]={Rojo,Verde,Azul} del mismo modo que en el apartado anterior, y posteriormente graba el numero coloreado sobre la matriz “Respuesta” donde ya hemos coloreado el fondo previamente. Si el número es de mas de 2 cifras mostrara ER.

//Funcion numero RGB MATRIX http://zygzax.com/
void Numero(int datos,int color[3],int out[3][8][8]){
 int f,c,n,u,d;
 if(datos>99){
 for(f=0;f<6;f++){
 for(c=0;c<8;c++){
 if(error[f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=error[f]1*color[n];
 }
 }
 }
 }
 }
 else{
 if(datos<10){
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[datos][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[datos][f]1*color[n];
 }
 }
 }
 } 
 }
 else{
 u=datos%10;
 d=(datos-u)/10;
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[d][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[d][f]1*color[n];
 }
 }
 }
 }
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[u][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[u][f]1*color[n];
 }
 }
 }
 }
 }
 }
}

Para esta función es necesario declarar una matriz con los números del 0 al 9 y otra matriz para las letras “Er” que indican error:

//Numeros para RGB MATRIX http://zygzax.com/
byte numeros[10][6][4]={
 {{0,1,1,0},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,0,1,0},{0,1,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,1,1,1}},
 {{0,1,1,0},{1,0,0,1},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,1,1,1}},
 {{1,1,1,1},{0,0,1,0},{0,1,0,0},{0,0,1,0},{1,0,0,1},{0,1,1,1}},
 {{0,0,0,1},{0,0,1,1},{0,1,0,1},{1,1,1,1},{0,0,0,1},{0,0,0,1}},
 {{1,1,1,1},{1,0,0,0},{1,1,1,0},{0,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,0,1,1},{0,1,0,0},{1,0,0,0},{1,1,1,1},{1,0,0,1},{0,1,1,0}},
 {{1,1,1,1},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,0,0,0},{1,0,0,0}},
 {{0,1,1,0},{1,0,0,1},{0,1,1,0},{1,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,1,1,0},{1,0,0,1},{0,1,1,1},{0,0,0,1},{0,0,1,0},{0,1,0,0}},
};
byte error[6][8]={{0,0,0,0,0,0,0,0},{1,1,1,0,1,1,1,0},{1,0,0,0,1,0,0,1},{1,1,1,0,1,1,1,0},{1,0,0,0,1,0,1,0},{1,1,1,0,1,0,0,1}};

· Imprimir(Respuesta): Imprime en la matriz de leds RGB la matriz “Respuesta” en la que ya hemos grabado el fondo y el número deseados.

//Funcion imprimir Colorduino http://zygzax.com/
void Imprimir(int data[3][8][8]){
 int f,c;
 for(f=0;f<8;f++){
 for(c=0;c<8;c++){
 if(data[0][f]1>1||data[1][f]1>1||data[2][f]1>1){
 Colorduino.SetPixel(f,c,data[0][f]1,data[1][f]1,data[2][f]1);
 }
 else{
 Colorduino.SetPixel(f,c,0,0,0);
 }
 }
 }
 Colorduino.FlipPage();
}

Ejemplo del código completo

Para finalizar, este sería el código completo para mostrar todos los números del 0 al 99 y ER en 100:

//Codigo numeros 0 a 99 Colorduino http://zygzax.com/
#include <Colorduino.h>
void setup()
{
Colorduino.Init(); //Inicializamos colorduino
// Calibracion del balance de blancos RGB
unsigned char whiteBalVal[3] = {36,63,63};
Colorduino.SetWhiteBal(whiteBalVal);
}
//CARACTERES---------------------
byte numeros[10][6][4]={
 {{0,1,1,0},{1,0,0,1},{1,0,0,1},{1,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,0,1,0},{0,1,1,0},{0,0,1,0},{0,0,1,0},{0,0,1,0},{0,1,1,1}},
 {{0,1,1,0},{1,0,0,1},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,1,1,1}},
 {{1,1,1,1},{0,0,1,0},{0,1,0,0},{0,0,1,0},{1,0,0,1},{0,1,1,1}},
 {{0,0,0,1},{0,0,1,1},{0,1,0,1},{1,1,1,1},{0,0,0,1},{0,0,0,1}},
 {{1,1,1,1},{1,0,0,0},{1,1,1,0},{0,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,0,1,1},{0,1,0,0},{1,0,0,0},{1,1,1,1},{1,0,0,1},{0,1,1,0}},
 {{1,1,1,1},{0,0,0,1},{0,0,1,0},{0,1,0,0},{1,0,0,0},{1,0,0,0}},
 {{0,1,1,0},{1,0,0,1},{0,1,1,0},{1,0,0,1},{1,0,0,1},{0,1,1,0}},
 {{0,1,1,0},{1,0,0,1},{0,1,1,1},{0,0,0,1},{0,0,1,0},{0,1,0,0}},
};
byte error[6][8]={{0,0,0,0,0,0,0,0},{1,1,1,0,1,1,1,0},{1,0,0,0,1,0,0,1},{1,1,1,0,1,1,1,0},{1,0,0,0,1,0,1,0},{1,1,1,0,1,0,0,1}};
//FIN CARACTERES-------------------
//FUNCIONES------------------------
 //Imprimir una matriz 3x8x8 (RGB,Filas,Columnas)
void Imprimir(int data[3][8][8]){
 int f,c;
 for(f=0;f<8;f++){
 for(c=0;c<8;c++){
 if(data[0][f]1>1||data[1][f]1>1||data[2][f]1>1){
 Colorduino.SetPixel(f,c,data[0][f]1,data[1][f]1,data[2][f]1);
 }
 else{
 Colorduino.SetPixel(f,c,0,0,0);
 }
 }
 }
 Colorduino.FlipPage();
}
 //Fin Imprimir matriz 3x8x8
 //Cambiar el color de fondo de la matriz (Ejecutar antes de escribir el numero)
void Fondo(int color[3],int out[3][8][8]){
 int f,c,n;
 for(f=0;f<8;f++){
 for(c=0;c<8;c++){
 for(n=0;n<3;n++){
 out[n][f]1=color[n];
 }
 }
 }
}
 //Fin cambio de fondo
 //Escribir numero de max 2 cifras
void Numero(int datos,int color[3],int out[3][8][8]){
 int f,c,n,u,d;
 if(datos>99){
 for(f=0;f<6;f++){
 for(c=0;c<8;c++){
 if(error[f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=error[f]1*color[n];
 }
 }
 }
 }
 }
 else{
 if(datos<10){
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[datos][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[datos][f]1*color[n];
 }
 }
 }
 } 
 }
 else{
 u=datos%10;
 d=(datos-u)/10;
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[d][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[d][f]1*color[n];
 }
 }
 }
 }
 for(f=0;f<6;f++){
 for(c=0;c<4;c++){
 if(numeros[u][f]1==1){
 for(n=0;n<3;n++){
 out[n][f+1]1=numeros[u][f]1*color[n];
 }
 }
 }
 }
 }
 }
}
 //Fin escribir numero
//PROGRAMA PRINCIPAL---------------
void loop(){
 int i;
 int color[3]={63,0,10};
 int fondo[3]={10,63,20};
 int respuesta[3][8][8];
 for(i=0;i<102;i++){
 Fondo(fondo,respuesta);
 Numero(i,color,respuesta);
 Imprimir(respuesta);
 delay(1000);
 }
}
//FIN PROGRAMA PRINCIPAL-----------

2 pensamientos en “Colorduino controlador de matriz RGB – Mostrar números

  1. Jen

    Hi,

    sorry to bother you but do you have any codes to display alphabets instead of numbers? :)

    Thanks, Jen.

Los comentarios están cerrados.