Ruengrid Witoonpan
/
UltraSonic1
Help me please
Diff: LiquidCrystal_I2C.h
- Revision:
- 0:b78e02ab7cde
diff -r 000000000000 -r b78e02ab7cde LiquidCrystal_I2C.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LiquidCrystal_I2C.h Wed Jan 15 17:17:21 2020 +0000 @@ -0,0 +1,165 @@ +#ifndef FDB_LIQUID_CRYSTAL_I2C_H +#define FDB_LIQUID_CRYSTAL_I2C_H + +//#include <inttypes.h> +//#include <Print.h> + +// 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 0x04//B00000100 // Enable bit +#define Rw 0x02 // B00000010 // Read/Write bit +#define Rs 0x01 //B00000001 // Register select bit + +/** + * This is the driver for the Liquid Crystal LCD displays that use the I2C bus. + * + * After creating an instance of this class, first call begin() before anything else. + * The backlight is on by default, since that is the most likely operating mode in + * most cases. + */ +class LiquidCrystal_I2C { +public: + /** + * Constructor + * + * @param lcd_addr I2C slave address of the LCD display. Most likely printed on the + * LCD circuit board, or look in the supplied LCD documentation. + * @param lcd_cols Number of columns your LCD display has. + * @param lcd_rows Number of rows your LCD display has. + * @param charsize The size in dots that the display has, use LCD_5x10DOTS or LCD_5x8DOTS. + */ + LiquidCrystal_I2C(unsigned char lcd_addr, unsigned char lcd_cols, unsigned char lcd_rows, unsigned char charsize = LCD_5x8DOTS); + + /** + * Set the LCD display in the correct begin state, must be called before anything else is done. + */ + void begin(); + + /** + * Remove all the characters currently shown. Next print/write operation will start + * from the first position on LCD display. + */ + void clear(); + + /** + * Next print/write operation will will start from the first position on the LCD display. + */ + void home(); + + /** + * Do not show any characters on the LCD display. Backlight state will remain unchanged. + * Also all characters written on the display will return, when the display in enabled again. + */ + void noDisplay(); + + /** + * Show the characters on the LCD display, this is the normal behaviour. This method should + * only be used after noDisplay() has been used. + */ + void display(); + + /** + * Do not blink the cursor indicator. + */ + void noBlink(); + + /** + * Start blinking the cursor indicator. + */ + void blink(); + + /** + * Do not show a cursor indicator. + */ + void noCursor(); + + /** + * Show a cursor indicator, cursor can blink on not blink. Use the + * methods blink() and noBlink() for changing cursor blink. + */ + void cursor(); + + void scrollDisplayLeft(); + void scrollDisplayRight(); + void printLeft(); + void printRight(); + void leftToRight(); + void rightToLeft(); + void shiftIncrement(); + void shiftDecrement(); + void noBacklight(); + void backlight(); + bool getBacklight(); + void autoscroll(); + void noAutoscroll(); + void createChar(unsigned char, unsigned char[]); + void setCursor(unsigned char, unsigned char); + virtual int write(unsigned char); + void command(unsigned char); + + inline void blink_on() { blink(); } + inline void blink_off() { noBlink(); } + inline void cursor_on() { cursor(); } + inline void cursor_off() { noCursor(); } + +// Compatibility API function aliases + void setBacklight(unsigned char new_val); // alias for backlight() and nobacklight() + void load_custom_character(unsigned char char_num, unsigned char *rows); // alias for createChar() + void printstr(const char[]); + int print(const char* text); +private: + void send(unsigned char, unsigned char); + void write4bits(unsigned char); + void expanderWrite(unsigned char); + void pulseEnable(unsigned char); + unsigned char _addr; + unsigned char _displayfunction; + unsigned char _displaycontrol; + unsigned char _displaymode; + unsigned char _cols; + unsigned char _rows; + unsigned char _charsize; + unsigned char _backlightval; +}; + +#endif // FDB_LIQUID_CRYSTAL_I2C_H \ No newline at end of file