#include "simplei2c.h" #include //adapted from https://github.com/lucasmaziero/LiquidCrystal_I2C // commands #define LCD_CLEARDISPLAY 0x01 #define LCD_RETURNHOME 0x02 #define LCD_ENTRYMODESET 0x04 #define LCD_DISPLAYCONTROL 0x08 #define LCD_CURSORSHIFT 0x10 #define LCD_FUNCTIONSET 0x20 #define LCD_SETCGRAMADDR 0x40 #define LCD_SETDDRAMADDR 0x80 // flags for display entry mode #define LCD_ENTRYRIGHT 0x00 #define LCD_ENTRYLEFT 0x02 #define LCD_ENTRYSHIFTINCREMENT 0x01 #define LCD_ENTRYSHIFTDECREMENT 0x00 // flags for display on/off control #define LCD_DISPLAYON 0x04 #define LCD_DISPLAYOFF 0x00 #define LCD_CURSORON 0x02 #define LCD_CURSOROFF 0x00 #define LCD_BLINKON 0x01 #define LCD_BLINKOFF 0x00 // flags for display/cursor shift #define LCD_DISPLAYMOVE 0x08 #define LCD_CURSORMOVE 0x00 #define LCD_MOVERIGHT 0x04 #define LCD_MOVELEFT 0x00 // 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 // flags for backlight control #define LCD_BACKLIGHT 0x08 #define LCD_NOBACKLIGHT 0x00 #define En 0b00000100 // Enable bit #define Rw 0b00000010 // Read/Write bit #define Rs 0b00000001 // Register select bit typedef struct { uint8_t _addr; uint8_t _displayfunction; uint8_t _displaycontrol; uint8_t _displaymode; uint8_t _cols; uint8_t _rows; uint8_t _charsize; uint8_t _backlightval; i2c* _i2cbus; } LCD_I2C; void LCD_init(LCD_I2C* lcd_i2c, i2c* i2cbus, uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows); void LCD_initEx(LCD_I2C* lcd_i2c, i2c* i2cbus, uint8_t lcd_addr, uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize); void LCD_begin(LCD_I2C* lcd_i2c); void LCD_clear(LCD_I2C* lcd_i2c); void LCD_home(LCD_I2C* lcd_i2c); void LCD_noDisplay(LCD_I2C* lcd_i2c); void LCD_display(LCD_I2C* lcd_i2c); void LCD_noBlink(LCD_I2C* lcd_i2c); void LCD_blink(LCD_I2C* lcd_i2c); void LCD_noCursor(LCD_I2C* lcd_i2c); void LCD_cursor(LCD_I2C* lcd_i2c); void LCD_scrollDisplayLeft(LCD_I2C* lcd_i2c); void LCD_scrollDisplayRight(LCD_I2C* lcd_i2c); //void LCD_printLeft(LCD_I2C* lcd_i2c); //void LCD_printRight(LCD_I2C* lcd_i2c); void LCD_leftToRight(LCD_I2C* lcd_i2c); void LCD_rightToLeft(LCD_I2C* lcd_i2c); //void LCD_shiftIncrement(LCD_I2C* lcd_i2c); //void LCD_shiftDecrement(LCD_I2C* lcd_i2c); void LCD_noBacklight(LCD_I2C* lcd_i2c); void LCD_backlight(LCD_I2C* lcd_i2c); bool LCD_getBacklight(LCD_I2C* lcd_i2c); void LCD_autoscroll(LCD_I2C* lcd_i2c); void LCD_noAutoscroll(LCD_I2C* lcd_i2c); void LCD_createChar(LCD_I2C* lcd_i2c, uint8_t location, uint8_t charmap[]); void LCD_setCursor(LCD_I2C* lcd_i2c, uint8_t col, uint8_t row); int LCD_write(LCD_I2C* lcd_i2c, uint8_t value); void LCD_command(LCD_I2C* lcd_i2c, uint8_t value); void LCD_blink_on(LCD_I2C* lcd_i2c); void LCD_blink_off(LCD_I2C* lcd_i2c); void LCD_cursor_on(LCD_I2C* lcd_i2c); void LCD_cursor_off(LCD_I2C* lcd_i2c); void LCD_setBacklight(LCD_I2C* lcd_i2c, uint8_t new_val); void LCD_load_custom_character(LCD_I2C* lcd_i2c, uint8_t char_num, uint8_t *rows); void LCD_printstr(LCD_I2C* lcd_i2c, const char[]);