Hi, just wanted to make a few comments on the library and the way you use the LCD library.
I've seen that you have multiple constructors for the various LCD, however, if you change:
#ifdef _LIQUIDCRYSTAL_SR3W_H_
LCDBitmap(LiquidCrystal_SR3W& lcd, byte bitmap_x, byte bitmap_y);
#else
#ifdef _LIQUIDCRYSTAL_SR2W_
LCDBitmap(LiquidCrystal_SR2W& lcd, byte bitmap_x, byte bitmap_y);
#else
#ifdef _LIQUIDCRYSTAL_SR_
LCDBitmap(LiquidCrystal_SR& lcd, byte bitmap_x, byte bitmap_y);
#else
#ifdef LiquidCrystal_I2C_h
LCDBitmap(LiquidCrystal_I2C& lcd, byte bitmap_x, byte bitmap_y);
#else
LCDBitmap(LiquidCrystal& lcd, byte bitmap_x, byte bitmap_y);
#endif
#endif
#endif
#endif
and use:
LCDBitmap ( LCD *lcd, byte bitmap_x, byte bitmap_y);
and in the private section of the class definition you declare:
#include "LCD.h"
LCD *_lcd;
Modify the constructor with this:
LCDBitmap::LCDBitmap(LCD *lcd, byte x, byte y)
{
bitmap_x = x;
bitmap_y = y;
_lcd = lcd;
}
as opposed to use each individual supported library. Your entire code could use the abstract class all the time and would be completely independent of the driver. Additionally you would have to change in your code the "lcd." for the pointer to "_lcd->" but a simple find and replace will do the trick nicely.
This is the nice thing about this library, if you use the LCD abstract class, you don't need to change the code at all to support any of its drivers, just the LCD object creation in your main program.
You would have to use some conditional compilation flags to determine if you are using the stock LiquidCrystal library or the LCD library though.
Your main program and examples would look as follows to support the I2C variant:
LiquidCrystal_I2C lcd(0x38);
LCDBitmap bitmap(&lcd, 12, 0);
To support the SR3W variant.
LiquidCrystal_SR3W lcd(2, 3, 4);
LCDBitmap bitmap(&lcd, 12, 0);