Hi there,
Custom characters are defined using an array of 8 bytes. Each byte can be thought of as a row of pixels. Since each bytes is 8 bits, you end up with a grid of 8x8 pixels. Here is a snippet of code from the animate sample:
// x x x 1 1 1 1 1
// x x x 1 0 0 0 0
// x x x 1 0 0 0 0
// x x x 1 0 0 0 0
// x x x 1 0 0 0 0
// x x x 1 0 0 0 0
// x x x 1 1 1 1 1
// x x x 0 0 0 0 0
uint8_t left[] = { 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x1F, 0x00 };
All 1's will be black pixels, all 0's will be white. Note: these LCD's actually use 5x8 pixels for characters so the first 3 bits in each byte are ignored when defining characters (marked as x's above).
Lets take the first row for example. Pull up your calculator and switch to binary mode. Enter 00011111 and convert to hexadecimal. You should get 0x1F.
Now, using the library you do the following to use the custom character.
// define character in ram at index 0
lcd.define_char(0, left);
// print character from cgram at index 0
lcd.print((char)0);
I hope this helps.