LiquidCrystal
LiquidCrystal_Base.h
1 #ifndef LiquidCrystal_Base_h
2 #define LiquidCrystal_Base_h
3 
4 #if (ARDUINO < 100)
5 #include <WProgram.h>
6 #else
7 #include <Arduino.h>
8 #endif
9 
10 #ifdef ARDUINO_ARCH_ESP32
11 #include <Wire.h>
12 #endif
13 
14 #ifdef __AVR__
15  #include <avr/pgmspace.h>
16 // #define FAST_MODE
17 #endif
18 
19 #include <inttypes.h>
20 #include <Print.h>
21 
22 #include "LCD_defs.h"
23 
24 #define LCD_DEFAULT_COLS 16
25 #define LCD_DEFAULT_ROWS 2
26 
27 class LiquidCrystal_Base : public Print
28 {
29 public:
30  ~LiquidCrystal_Base() = default;
31  virtual void init(uint8_t lcd_cols, uint8_t lcd_rows, uint8_t charsize = LCD_5x8DOTS);
32  virtual void init(uint8_t mode = LCD_4BITMODE);
33  virtual void begin();
34 #if (ARDUINO < 100)
35  virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS, uint8_t mode = LCD_4BITMODE){};
36 #else
37  virtual void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS, uint8_t mode = LCD_4BITMODE) = 0;
38 #endif
39 
40  void clear();
41  void clear(uint8_t rowStart, uint8_t colStart = 0, uint8_t colCnt = 255);
42  void home();
43  void noDisplay();
44  void display();
45  // void display(lcd_mode_t mode);
46  void noBlink();
47  void blink();
48  void noCursor();
49  void cursor();
50  void scrollDisplayLeft();
51  void scrollDisplayRight();
52  void leftToRight();
53  void rightToLeft();
54  void autoscroll();
55  void noAutoscroll();
56  void createChar(uint8_t, uint8_t[]);
57 #ifdef __AVR__
58  void createChar(uint8_t location, const char *charmap);
59 #endif
60  void setCursor(uint8_t col, uint8_t row, uint8_t offsets[]);
61  void printstr(const char[]);
62 
63  virtual void setCursor(uint8_t col, uint8_t row);
64  virtual void command(uint8_t value);
65 
66 #if (ARDUINO < 100)
67  virtual void write(uint8_t value);
68 #else
69  virtual size_t write(uint8_t value);
70 #endif
71 
72 #if (ARDUINO < 100)
73  virtual void write4bits(uint8_t value){};
74  virtual void send(uint8_t value, uint8_t mode){};
75 #else
76  virtual void write4bits(uint8_t value) = 0;
77  virtual void send(uint8_t value, uint8_t mode) = 0;
78 #endif
79 
80  bool getMode() { return readBitFlag(_displayfunction, LCD_8BITMODE); }
81  uint8_t getCols() { return _cols; }
82  uint8_t getRows() { return _rows; }
83 protected:
84 
85  uint8_t _cols = LCD_DEFAULT_COLS;
86  uint8_t _rows = LCD_DEFAULT_ROWS;
87 
88  uint8_t _displayfunction;
89  uint8_t _displaycontrol;
90  uint8_t _displaymode;
91 
93  // void setContrast(uint8_t new_val);
94  // void setDelay(int,int); //for asynchroneous, no delay funcrion
95  // uint8_t init_bargraph(uint8_t graphtype);
96  // void draw_horizontal_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end);
97  // void draw_vertical_graph(uint8_t row, uint8_t column, uint8_t len, uint8_t pixel_col_end);
98 
99  inline uint8_t status() { return _displayfunction; }
100  inline void on(){ display(); }
101  inline void off() { noDisplay(); }
102  inline void blink_on() { blink(); }
103  inline void blink_off() { noBlink(); }
104  inline void cursor_on() { cursor(); }
105  inline void cursor_off() { noCursor(); }
106  inline void printLeft() { rightToLeft(); }
107  inline void printRight() { leftToRight(); }
108  inline void shiftIncrement() { autoscroll(); }
109  inline void shiftDecrement() { noAutoscroll(); }
110  // virtual void write8bits(uint8_t value);
111  // void writeNbits(uint8_t value, uint8_t numBits);
112 private:
113  inline void setBitFlag(uint8_t& flagsGroup, const uint8_t& bitToSet) __attribute__((always_inline)) {
114  flagsGroup |= bitToSet;
115  }
116 
117  inline void clearBitFlag(uint8_t& flagsGroup, const uint8_t& bitToClear) __attribute__((always_inline)) {
118  flagsGroup &= ~bitToClear;
119  }
120 
121  inline bool readBitFlag(uint8_t& flagsGroup, const uint8_t& bitToRead) __attribute__((always_inline)) {
122  return flagsGroup & bitToRead;
123  }
124 
125  inline void writeBitFlag(uint8_t& flagsGroup, const uint8_t& bitToSet, const bool& flagValue) __attribute__((always_inline)) {
126  if (flagValue) setBitFlag(flagsGroup, bitToSet);
127  else clearBitFlag(flagsGroup, bitToSet);
128  }
129 
130  inline bool checkBitFlag(uint8_t& flagsGroup, const uint8_t& bitToCheck) __attribute__((always_inline)) {
131  return (flagsGroup & (1 << bitToCheck)) ? true : false;
132  }
133 
134 };
135 
136 #endif
137 
138 // #define LCD_BRIGHT100 0x00
139 // #define LCD_BRIGHT75 0x01
140 // #define LCD_BRIGHT50 0x02
141 // #define LCD_BRIGHT25 0x03
142 //void bright (uint8_t brg) { command (LCD_FUNCTIONSET | _displayfunction | brg); }
143 // lcd.print(F("Cursor"));
Definition: LiquidCrystal_Base.h:27