SegLCDLib
Loading...
Searching...
No Matches
SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h
Go to the documentation of this file.
1#ifndef SEGLCD_PCF8576_4SEG6SEGMAINTSEGBATUNITS_H
2#define SEGLCD_PCF8576_4SEG6SEGMAINTSEGBATUNITS_H
3
4
5#if !defined(SEGLCD_DISABLE_ALL_LCDS) || defined(SEGLCD_ENABLE_PCF8576_4SEG6SEGMAINTSEGBATUNITS)
6#include <SegDriver_PCF8576.h>
7
22 public:
23 typedef enum : uint16_t {
24 UNIT_MPA = 0x01,
25 UNIT_KPA = 0x02,
26 UNIT_UEPS = 0x04,
27 UNIT_MM = 0x08,
28 UNIT_MV = 0x10,
29 UNIT_NM = 0x20,
30 UNIT_KG = 0x40,
31 UNIT_G = 0x80,
32 UNIT_DEGREE = 0x0100,
33 UNIT_ALL = 0x01FF
35
37 void init() override;
38 void clear() override;
39 void setBatteryLevel(uint8_t value);
40 void setSignalLevel(uint8_t value);
41 void setUnits(uint16_t units);
42 void clearUnits(uint16_t units);
43 void setDegreeSymbol(bool state, uint8_t index = 0);
44 void setMaintenanceSymbol(bool state, uint8_t index = 0);
45 void setCursor(uint8_t row, uint8_t col) override;
46 using SegLCDLib::write;
47 size_t write(uint8_t ch) override;
48
49 protected:
50 void _setColon(uint8_t row, uint8_t col, bool state) override;
51 void _setDecimal(uint8_t row, uint8_t col, bool state) override;
52
53 private:
54 static constexpr uint8_t ADDR_SIGNAL = 0x0A;
55 static constexpr uint8_t ADDR_BATT = 0x08;
56 static constexpr uint8_t ADDR_SMALL_SEGS = 0x00;
57 static constexpr uint8_t ADDR_LABELS = 0x11;
58 static constexpr uint8_t ADDR_BIG_SEGS = 0x0B;
59
60 static constexpr uint8_t RAM_ADDR_LAST = 0x18;
61 static constexpr uint8_t RAM_BYTE_COUNT = (RAM_ADDR_LAST + 2) / 2;
62
63 uint8_t _buffer_default[6] = {0};
64
65 static constexpr uint8_t FLAG_COLON_TOP = 0x01;
66 static constexpr uint8_t FLAG_COLON_DEFAULT_LEFT = 0x02;
67 static constexpr uint8_t FLAG_COLON_DEFAULT_RIGHT = 0x04;
68
69 // Decimal configuration: column offset -1 (dot belongs to previous position)
70 static constexpr int8_t DECIMAL_COL_OFFSET = -1; // -1: dot belongs to previous position
71 static constexpr uint8_t DECIMAL_TOP_MIN_COL = 0;
72 static constexpr uint8_t DECIMAL_TOP_MAX_COL = 2;
73 static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL = 0;
74 static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL = 4;
75
76 // Colon configuration (separate positions from decimal)
77 static constexpr uint8_t COLON_TOP_COL = 2;
78 static constexpr uint8_t COLON_BOTTOM_LEFT_COL = 2;
79 static constexpr uint8_t COLON_BOTTOM_RIGHT_COL = 4;
80
81 uint8_t _mapSegmentsTop(uint8_t val);
82 uint8_t _mapSegments(uint8_t val);
83 uint8_t _convertUnitFlags(uint16_t units);
84 size_t _writeRow0(uint8_t ch);
85 size_t _writeRow1(uint8_t ch);
86};
87#endif
88
89#endif
PCF8576 LCD segment driver.
Definition SegDriver_PCF8576.h:12
static constexpr uint8_t DEFAULT_PCX85_I2C_ADDRESS
Definition SegDriver_PCx85.h:18
static constexpr uint8_t DEFAULT_SUBADDRESS
Definition SegDriver_PCx85.h:19
virtual size_t write(uint8_t)
Definition SegLCDLib.h:113
4+6 digit dual LCD with maintenance/battery/signal (PCF8576).
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:21
static constexpr uint8_t FLAG_COLON_DEFAULT_LEFT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:66
void clear() override
Clear all visible segments on the display.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:18
static constexpr uint8_t ADDR_SIGNAL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:54
static constexpr uint8_t COLON_TOP_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:77
static constexpr uint8_t DECIMAL_TOP_MAX_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:72
static constexpr uint8_t FLAG_COLON_TOP
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:65
static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:73
static constexpr uint8_t ADDR_SMALL_SEGS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:56
static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:74
void setBatteryLevel(uint8_t value)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:23
static constexpr uint8_t COLON_BOTTOM_LEFT_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:78
void setMaintenanceSymbol(bool state, uint8_t index=0)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:93
uint8_t _buffer_default[6]
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:63
void clearUnits(uint16_t units)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:80
static constexpr uint8_t RAM_ADDR_LAST
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:60
size_t write(uint8_t ch) override
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:298
static constexpr uint8_t COLON_BOTTOM_RIGHT_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:79
size_t _writeRow1(uint8_t ch)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:234
void setCursor(uint8_t row, uint8_t col) override
Set cursor on exact digit.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:174
static constexpr uint8_t RAM_BYTE_COUNT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:61
void init() override
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:13
void _setColon(uint8_t row, uint8_t col, bool state) override
Virtual method for setting colon.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:98
size_t _writeRow0(uint8_t ch)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:191
static constexpr uint8_t FLAG_COLON_DEFAULT_RIGHT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:67
uint8_t _mapSegmentsTop(uint8_t val)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:310
void setUnits(uint16_t units)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:72
void setDegreeSymbol(bool state, uint8_t index=0)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:88
UnitFlags
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:23
@ UNIT_MV
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:28
@ UNIT_G
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:31
@ UNIT_ALL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:33
@ UNIT_NM
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:29
@ UNIT_MPA
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:24
@ UNIT_UEPS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:26
@ UNIT_KPA
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:25
@ UNIT_DEGREE
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:32
@ UNIT_MM
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:27
@ UNIT_KG
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:30
uint8_t _mapSegments(uint8_t val)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:321
static constexpr uint8_t ADDR_LABELS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:57
uint8_t _convertUnitFlags(uint16_t units)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:59
static constexpr uint8_t ADDR_BIG_SEGS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:58
void setSignalLevel(uint8_t value)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:42
void _setDecimal(uint8_t row, uint8_t col, bool state) override
Virtual method for setting decimal point.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:125
static constexpr uint8_t ADDR_BATT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:55
static constexpr uint8_t DECIMAL_TOP_MIN_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:71
static constexpr int8_t DECIMAL_COL_OFFSET
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:70
Abstract I2C transport.
Definition SegTransport.h:54