Wierd characters on display

Don,

There used to be no such thing as LCD.println before Arduino 1.0 (or around that version). In Arduino 1.0 (or around that version), the LiquidCrystal library was modified with this line:

class LiquidCrystal : public Print

This essentially makes LiquidCrystal object inherit Print class, which has all the print and println with different types of arguments (byte, int, char, char * etc.).

LiquidCrystal class thus no longer implements print or println and just implements write, the writing single byte to LCD. The print and println are implemented in the parent class, the Print. They are very simple implementations where write is called repeatedly until all that needs to be printed is sent out byte per byte with write.

The newer libraries with I2C LCDs probably just takes the Arduino 1.0 LiquidCrystal library and rewrites the begin and write4bytes etc. methods and keep the rest unchanged, slap on a new library name. I don't think the I2C library writers are all eager beavers to write out their println method to OVERRIDE the parent ones. The mere fact that println works and with 2 strange characters covers maybe 90% of the logic leading to my conclusion, not 100%.