Advanced programming of LCD display

Having just bought my first Arduino (Uno) and a 20x4 I2C LCD display (from Sainsmart), I have been learning how to get it working.

I have managed to get the basics working fine, after sorting out the library version problem (I found a newer library for the v1 IDE) and the incorrect I2C address (0x3F, not 0x27), and so now have the typical "Hello World" example displaying nicely on my LCD screen.

I would like to move on to more advanced usage - like custom characters, scrolling messages, and whatever else the display is capable of, but can't seem to find much using Google. Maybe someone could point me to some good examples/tutorials/documentation for the other functions implemented in the library, and by the display?

I believe the LiquidCrystalI2c library is capable of creating custom characters just like the regular LiquidCrystal library using the createChar function.

http://arduino.cc/en/Reference/LiquidCrystalCreateChar

Fancy some menus and data entries?

This was designed for parallel LCD interface so you need to modify it to work with an I2C LCD.

Yes, thanks, tried that custom character just now and it works. Looks like most things in that library have been implemented.

But there's lots of other interesting stuff mentioned in the header file

// flags for function set
#define LCD_8BITMODE 0x10
#define LCD_4BITMODE 0x00
#define LCD_2LINE 0x08
#define LCD_1LINE 0x00
#define LCD_5x10DOTS 0x04
#define LCD_5x8DOTS 0x00

  void printLeft();
  void printRight();

  void shiftIncrement();
  void shiftDecrement();
  void command(uint8_t);

So, I am wondering about 8 bit mode vs 4 bit, 5x10 dots vs 5x8, printleft/printright, and especially that last "command" function.

There's also some unimplemented API functions

////Unsupported API functions (not implemented in this library)
uint8_t status();
void setContrast(uint8_t new_val);
uint8_t keypad();
void setDelay(int,int);
void on();
void off();
uint8_t init_bargraph(uint8_t graphtype);
void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end);
void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len,  uint8_t pixel_col_end);

The bargraph, in particular, looks interesting.

liudr: Fancy some menus and data entries?

http://liudr.wordpress.com/phi_prompt/

This was designed for parallel LCD interface so you need to modify it to work with an I2C LCD.

That's good stuff. Yes, I will need a menuing system. Thanks for the link.