lunes, 6 de octubre de 2014

Peggy 2 es un ojo

El tablero va a funcionar como un ojo, para esto tengo que convertir la imagen en reconocible a través de los tres colores luz primarios.
El primer paso es encontrar la manera de convertir estas formas que me interesan en tres canales de color.


En el sketch que me permite hacer animación las imágenes están en código hexadecimal. Este código funciona con 14 dígitos 0 1 2 3 4 5 6 7 8 9 A B C D E.  Pero sólo convierte imágenes a un canal, ósea en blanco y negro.  Necesito encontrar una forma de convertir imagen en código hex separando los 3 canales (r,g, b) e indicar la posición en la placa.


unsigned int frames = 3;

prog_uint32_t datastore[] PROGMEM  = {
 0 , 0 , 0 , 0 , 0 , 0 , 53248 , 36800 , 33824 , 32776 , 
 16386 , 0 , 1 , 0 , 8192 , 0 , 0 , 0 , 4098 , 8 , 
 1056 , 576 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 114688 , 16384 , 24576 , 8256 , 4160 , 
 8064 , 4096 , 4096 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 
 0 , 57344 , 130048 , 24320 , 256 , 8192 , 8192 , 0 , 4096 , 0 , 
 4096 , 4096 , 0 , 0 , 0
};


En este código están codificados 3 frames, cada 25 cifras es uno de ellos. Son 25 filas de información porque la imagen tiene 25 x 25 pixeles. La información que se carga en la placa esta acomodada por arrays.

Ya que en mi tablero tengo,
 blanco - rojo -blanco -roj
verde- azull - verde -azul
Una solución sería guardar la misma imagen de ( 12 x 12 ) dos veces, una con el canal rojo solamente y otra con la info de los canales verde y azul. Acomodarlos alternando estos códigos. Esto parece lógico pero aun tengo que intentarlo, de cualquier forma sería una solución muy rústica y no se aprovecharían otras posibilidades como hacer degradados.

Para conseguir el código hexadecimal de una imagen estoy utilizando la terminal de ubuntu

sudo od -x /file.bmp 


 tamaño original 12 x 12 pixeles


Hex data del canal rojo:

0000000 4d42 01cc 0000 0000 0000 001a 0000 000c
0000020 0000 000c 000c 0001 0018 0000 0000 0000
0000040 d2d2 ffd2 ffff ffff ffff ffff ffff ffff
0000060 ffff ffff ffff ffff d2d2 00d2 0000 0000
0000100 0000 0000 fafa fffa ffff ffff ffff ffff
0000120 ffff ffff ffff ffff ffff ffff f9f9 00f9
0000140 0000 0000 0000 0000 d2d2 ffd2 ffff ffff
0000160 ffff ffff ffff ffff ffff ffff ffff ffff
0000200 d2d2 00d2 0000 0000 0000 0000 9090 ff90
0000220 ffff ffff ffff ffff ffff ffff ffff ffff
0000240 ffff ffff 9191 0091 0000 0000 0000 0000
0000260 2e2e b62e b6b6 ffff ffff ffff ffff ffff
0000300 ffff ffff b6ff b6b6 2d2d 002d 0000 0000
0000320 0000 0000 0000 2e00 2e2e 9191 d291 d2d2
0000340 fafa d2fa d2d2 9191 2e91 2e2e 0000 0000
0000360 0000 0000 0000 0000 0000 0000 0000 0000
*
0000700 0000 0000 0000 0000 0000 0000
0000714

Hex data del canal verde:

0000000 4d42 01cc 0000 0000 0000 001a 0000 000c
0000020 0000 000c 000c 0001 0018 f3f3 f3f3 f3f3
0000040 fcfc fffc ffff ffff ffff ffff ffff ffff
0000060 ffff ffff ffff ffff fdfd f3fd f3f3 f3f3
0000100 f3f3 f3f3 ffff ffff ffff ffff ffff ffff
0000120 ffff ffff ffff ffff ffff ffff ffff f4ff
0000140 f4f4 f3f3 f3f3 f3f3 fcfc fffc ffff ffff
0000160 ffff ffff ffff ffff ffff ffff ffff ffff
0000200 fdfd f4fd f4f4 f4f4 f4f4 f4f4 f9f9 fff9
0000220 ffff ffff ffff ffff ffff ffff ffff ffff
0000240 ffff ffff f8f8 f3f8 f3f3 f3f3 f4f3 f4f4
0000260 f5f5 fbf5 fbfb ffff ffff ffff ffff ffff
0000300 ffff ffff fbff fbfb f5f5 f4f5 f4f4 f3f3
0000320 f3f3 f3f3 f3f3 f5f3 f5f5 f9f9 fdf9 fdfd
0000340 ffff fdff fdfd f9f9 f5f9 f5f5 f3f3 f4f3
0000360 f4f4 f4f4 f4f4 f4f4 f4f4 f3f4 f3f3 f3f3
0000400 f3f3 f3f3 f3f3 f4f3 f4f4 f3f3 f3f3 f3f3
0000420 f4f4 f4f4 f4f4 f3f3 f3f3 f3f3 f3f3 f3f3
0000440 f3f3 f3f3 f3f3 f3f3 f3f3 f4f3 f4f4 f4f4
0000460 f3f4 f3f3 f4f4 f3f4 f3f3 f4f4 f4f4 f4f4
0000500 f4f4 f4f4 f4f4 f3f3 f3f3 f3f3 f4f4 f3f4
0000520 f3f3 f4f4 f3f4 f3f3 f3f3 f4f3 f4f4 f4f4
0000540 f3f4 f3f3 f3f3 f4f3 f4f4 f4f4 f4f4 f4f4
0000560 f3f3 f4f3 f4f4 f4f4 f4f4 f4f4 f4f4 f3f4
0000600 f3f3 f3f3 f3f3 f3f3 f4f4 f4f4 f4f4 f3f3
0000620 f4f3 f4f4 f4f4 f3f4 f3f3 f3f3 f3f3 f3f3
0000640 f3f3 f4f3 f4f4 f3f3 f3f3 f3f3 f4f4 f3f4
0000660 f3f3 f3f3 f3f3 f3f3 f3f3 f3f3 f3f3 f3f3
0000700 f4f3 f4f4 f4f4 f3f4 f3f3 0000
0000714

Hex data del canal azul:

0000000 4d42 01cc 0000 0000 0000 001a 0000 000c
0000020 0000 000c 000c 0001 0018 ffff ffff ffff
0000040 4d4d 004d 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 4d4d ff4d ffff ffff
0000100 ffff ffff 0707 0007 0000 0000 0000 0000
0000120 0000 0000 0000 0000 0000 0000 0707 ff07
0000140 ffff ffff ffff ffff 4d4d 004d 0000 0000
0000160 0000 0000 0000 0000 0000 0000 0000 0000
0000200 4d4d ff4d ffff ffff ffff ffff 9999 0099
0000220 0000 0000 0000 0000 0000 0000 0000 0000
0000240 0000 0000 9999 ff99 ffff ffff ffff ffff
0000260 e7e7 70e7 7070 0000 0000 0000 0000 0000
0000300 0000 0000 7100 7171 e6e6 ffe6 ffff ffff
0000320 ffff ffff ffff e6ff e6e6 9999 4d99 4d4d
0000340 0606 4c06 4c4c 9999 e799 e7e7 ffff ffff
0000360 ffff ffff ffff ffff ffff ffff ffff ffff
*
0000700 ffff ffff ffff ffff ffff 0000
0000714



Después de realizar experimentos con la información hexadecimal,  me estoy dando cuenta que este método no funciona  porque tengo los focos azules y verdes en la fila. 
----------------------------------------------------------------------------------------------------------------------

Un array es un medio de guardar un conjunto de objetos de la misma clase.

No hay comentarios:

Publicar un comentario