-
1How to generate a character bit map in Flash
Ingredients:
- The Dot Factory: An LCD Font and Image Generator
- A True Type font of choice: Hack (which is also a beautiful font for source code editing)
- A display that uses pixels.
- An Arduino Video Display Shield (Have you understood recursion already? ;-)
"The Dot Factory is a small open source tool (MIT licensed) intended to generate the required C language information to store many fonts and images, as efficiently as possible, on a microcontroller."
-
2How to generate an animation with the Block Move command (BoingBall)
I used a 8-frame GIF animation of the famous Amiga BoingBall and separately saved the frames with the help of IrfanView. With the same program the images got scaled that the ball had a size of 30 x 30 pixels with a 1 pixel border on all 4 sides making it a 32x32 image size.
On the website Image2ASCIIArt (A big thank you to Robert Ecker for this great tool) I converted the 8 single images to text files.
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW WWWWWWWWWWW##....####.WWWWWWWWWW WWWWWWWW#...#####.####..WWWWWWWW WWWWWWW....#####.........#WWWWWW WWWWWW....######......###.#WWWWW WWWWW....######.......####.#WWWW WWWW.###....###.......#####..WWW WWW.####.......#.....######..WWW WWW####.......#####..######...WW WW.####.......#######..####...WW WW####.......########.....#...#W W.####.......########......#...W W#.###.......########......###.W W#...##.....########.......####W W....######.########.......####W W....#######...#####.......####W W....######........#.......####W W....######........####....####W W....######........#######.####W W.#..######........#######....#W W.#########.......########....#W WW###...###.......#######.....#W WW###.....#.......#######....#WW WWW##.....####...#######.....#WW WWWW#.....#######.######....#WWW WWWW.#....######.......#...#WWWW WWWWW.#...######.......####WWWWW WWWWWW.##.######......###.WWWWWW WWWWWWWW##..####.....###.WWWWWWW WWWWWWWWW##....#....###WWWWWWWWW WWWWWWWWWWWW..####...WWWWWWWWWWW WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
From here it was 3 simple search and replace operations and some surrounding code for a nice data structure that got used in my code to be programmed into FLASH similar to the character set. The code snipped below would look nice if it could be formatted to 32 entries per line.
const PROGMEM byte boingball[] = { // frame 0 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x00, 0x00, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x00, 0x00, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x0D, 0x24, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x24, 0x24, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x0D, 0x0D, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x0D, 0x24, 0x24, 0x24, 0x24, 0x0D, 0x0D, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // frame 1......}
Next: How to do a block animation with the VLSI VS23S010D.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.