diff --git a/LiquidCrystal_I2C.cpp b/LiquidCrystal_I2C.cpp index 79f4389..44b7b05 100644 --- a/LiquidCrystal_I2C.cpp +++ b/LiquidCrystal_I2C.cpp @@ -214,6 +214,15 @@ void LiquidCrystal_I2C::createChar(uint8_t location, uint8_t charmap[]) { } } +//createChar with PROGMEM input +void LiquidCrystal_I2C::createChar(uint8_t location, const char *charmap) { + location &= 0x7; // we only have 8 locations 0-7 + command(LCD_SETCGRAMADDR | (location << 3)); + for (int i=0; i<8; i++) { + write(pgm_read_byte_near(charmap++)); + } +} + // Turn the (optional) backlight off/on void LiquidCrystal_I2C::noBacklight(void) { _backlightval=LCD_NOBACKLIGHT; diff --git a/LiquidCrystal_I2C.h b/LiquidCrystal_I2C.h index 201be33..c033f7f 100644 --- a/LiquidCrystal_I2C.h +++ b/LiquidCrystal_I2C.h @@ -77,8 +77,11 @@ public: void autoscroll(); void noAutoscroll(); void createChar(uint8_t, uint8_t[]); + void createChar(uint8_t location, const char *charmap); + // Example: const char bell[8] PROGMEM = {B00100,B01110,B01110,B01110,B11111,B00000,B00100,B00000}; + void setCursor(uint8_t, uint8_t); -#if defined(ARDUINO) && ARDUINO >= 100 +#if defined(ARDUINO) && ARDUINO >= 100 virtual size_t write(uint8_t); #else virtual void write(uint8_t);