LiquidCrystalIO
Loading...
Searching...
No Matches
LiquidCrystalIO.h
Go to the documentation of this file.
1#ifndef LiquidCrystal_h
2#define LiquidCrystal_h
3
4#if defined(IOA_USE_MBED) || defined(BUILD_FOR_PICO_CMAKE)
5#include "PrintCompat.h"
6#else
7#include "Print.h"
8#endif
9
10#include <IoAbstraction.h>
11#include <inttypes.h>
12
13// commands
14#define LCD_CLEARDISPLAY 0x01
15#define LCD_RETURNHOME 0x02
16#define LCD_ENTRYMODESET 0x04
17#define LCD_DISPLAYCONTROL 0x08
18#define LCD_CURSORSHIFT 0x10
19#define LCD_FUNCTIONSET 0x20
20#define LCD_SETCGRAMADDR 0x40
21#define LCD_SETDDRAMADDR 0x80
22
23// flags for display entry mode
24#define LCD_ENTRYRIGHT 0x00
25#define LCD_ENTRYLEFT 0x02
26#define LCD_ENTRYSHIFTINCREMENT 0x01
27#define LCD_ENTRYSHIFTDECREMENT 0x00
28
29// flags for display on/off control
30#define LCD_DISPLAYON 0x04
31#define LCD_DISPLAYOFF 0x00
32#define LCD_CURSORON 0x02
33#define LCD_CURSOROFF 0x00
34#define LCD_BLINKON 0x01
35#define LCD_BLINKOFF 0x00
36
37// flags for display/cursor shift
38#define LCD_DISPLAYMOVE 0x08
39#define LCD_CURSORMOVE 0x00
40#define LCD_MOVERIGHT 0x04
41#define LCD_MOVELEFT 0x00
42
43// flags for function set
44#define LCD_8BITMODE 0x10
45#define LCD_4BITMODE 0x00
46#define LCD_2LINE 0x08
47#define LCD_1LINE 0x00
48#define LCD_5x10DOTS 0x04
49#define LCD_5x8DOTS 0x00
50
56
57// a forward reference to the analog device
58class AnalogDevice;
59
65class LiquidCrystal : public Print {
66public:
78
84
113 LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t en, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
114 LiquidCrystal::BackLightPinMode mode, IoAbstractionRef ioMethod);
115
130 LiquidCrystal(uint8_t rs, uint8_t enable,
131 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
132 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, BasicIoAbstraction *ioMethod = NULL);
133
149 LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
150 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
151 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, BasicIoAbstraction *ioMethod = NULL);
152
165 LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable,
166 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, BasicIoAbstraction *ioMethod = NULL);
167
178 LiquidCrystal(uint8_t rs, uint8_t enable,
179 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, BasicIoAbstraction *ioMethod = NULL);
180
198 void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable,
199 uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3,
200 uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, BasicIoAbstraction *ioMethod);
201
206 void setIoAbstraction(IoAbstractionRef ioRef) {
207 _io_method = ioRef;
208 }
209
220
229 void configureAnalogBacklight(AnalogDevice* analogDevice, uint8_t backlightPin);
230
236 void setDelayTime(uint8_t command, uint8_t settleTime) { _delayTime = (settleTime > 1) ? settleTime : 1; }
237
245 void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
246
251 void clear();
252
256 void home();
257
261 void backlight() { setBacklight(HIGH); }
262
266 void noBacklight() { setBacklight(LOW); }
267
273 void setBacklight(uint8_t state);
274
278 void noDisplay();
279
283 void display();
284
288 void noBlink();
289
293 void blink();
294
298 void noCursor();
299
303 void cursor();
304
305 void scrollDisplayLeft();
306
307 void scrollDisplayRight();
308
309 void leftToRight();
310
311 void rightToLeft();
312
313 void autoscroll();
314
315 void noAutoscroll();
316
325 void setRowOffsets(int row1, int row2, int row3, int row4);
326
332 void createChar(uint8_t charNo, const uint8_t data[]);
333
339 void createCharPgm(uint8_t, const uint8_t[]);
340
346 void setCursor(uint8_t x, uint8_t y);
347
353 size_t write(uint8_t ch) override;
354
355 void command(uint8_t);
356
357 using Print::write;
358
359private:
360 void send(uint8_t, uint8_t);
361
362 void write4bits(uint8_t);
363
364 void write8bits(uint8_t);
365
366 void pulseEnable();
367
368 uint8_t _rs_pin; // LOW: command. HIGH: character.
369 uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD.
370 uint8_t _enable_pin; // activated by a HIGH pulse.
371 uint8_t _data_pins[8];
372
373 uint8_t _displayfunction;
374 uint8_t _displaycontrol;
375 uint8_t _displaymode;
376
377 uint8_t _delayTime;
378 BackLightPinMode _backlightMode;
379 uint8_t _backlightPin;
380
381 uint8_t _numlines;
382 uint8_t _row_offsets[4];
383
384 BasicIoAbstraction *_io_method;
385 AnalogDevice* _analog_device;
386};
387
393#define LiquidCrystalI2C_RS_EN(var, addr, backlightInv) \
394 extern BasicIoAbstraction* ioFrom8574(uint8_t, pinid_t, WireType, bool); \
395 auto macro_backlight_tc = (backlightInv) ? LiquidCrystal::BACKLIGHT_INVERTED : LiquidCrystal::BACKLIGHT_NORMAL; \
396 LiquidCrystal var(0, 1, 2, 4, 5, 6, 7, macro_backlight_tc, ioFrom8574(addr, 0xff, &Wire, false));
397
403#define LiquidCrystalI2C_EN_RS(var, addr, backlightInv) \
404 extern BasicIoAbstraction* ioFrom8574(uint8_t, pinid_t, WireType, bool); \
405 auto macro_backlight_tc = (backlightInv) ? LiquidCrystal::BACKLIGHT_INVERTED : LiquidCrystal::BACKLIGHT_NORMAL; \
406 LiquidCrystal var(2, 1, 0, 4, 5, 6, 7, macro_backlight_tc, ioFrom8574(addr, 0xff, &Wire, false));
407
408#endif
void noBlink()
Definition LiquidCrystalIO.cpp:280
void backlight()
Definition LiquidCrystalIO.h:261
size_t write(uint8_t ch) override
Definition LiquidCrystalIO.cpp:349
void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, BasicIoAbstraction *ioMethod)
Definition LiquidCrystalIO.cpp:73
void configureAnalogBacklight(AnalogDevice *analogDevice, uint8_t backlightPin)
Definition LiquidCrystalIO.cpp:117
void cursor()
Definition LiquidCrystalIO.cpp:274
void blink()
Definition LiquidCrystalIO.cpp:285
void configureBacklightPin(uint8_t backlightPin, BackLightPinMode mode=LiquidCrystal::BACKLIGHT_NORMAL)
Definition LiquidCrystalIO.cpp:105
void createChar(uint8_t charNo, const uint8_t data[])
Definition LiquidCrystalIO.cpp:325
void setIoAbstraction(IoAbstractionRef ioRef)
Definition LiquidCrystalIO.h:206
void createCharPgm(uint8_t, const uint8_t[])
Definition LiquidCrystalIO.cpp:335
void display()
Definition LiquidCrystalIO.cpp:263
void setBacklight(uint8_t state)
Definition LiquidCrystalIO.cpp:125
void noDisplay()
Definition LiquidCrystalIO.cpp:258
void noBacklight()
Definition LiquidCrystalIO.h:266
void clear()
Definition LiquidCrystalIO.cpp:235
void noCursor()
Definition LiquidCrystalIO.cpp:269
void setCursor(uint8_t x, uint8_t y)
Definition LiquidCrystalIO.cpp:245
BackLightPinMode
Definition LiquidCrystalIO.h:70
@ BACKLIGHT_NORMAL
Definition LiquidCrystalIO.h:72
@ BACKLIGHT_INVERTED
Definition LiquidCrystalIO.h:74
@ BACKLIGHT_PWM
Definition LiquidCrystalIO.h:76
void setDelayTime(uint8_t command, uint8_t settleTime)
Definition LiquidCrystalIO.h:236
void begin(uint8_t cols, uint8_t rows, uint8_t charsize=LCD_5x8DOTS)
Definition LiquidCrystalIO.cpp:137
void home()
Definition LiquidCrystalIO.cpp:240
LiquidCrystal()
Definition LiquidCrystalIO.cpp:48
void setRowOffsets(int row1, int row2, int row3, int row4)
Definition LiquidCrystalIO.cpp:227