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#include <Wire.h>
5#include <SegDriver_PCx85.h>
6
21 public:
22 typedef enum {
23 LABEL_MPA = 0x01,
24 LABEL_KPA = 0x02,
25 LABEL_UEPS = 0x04,
26 LABEL_MM = 0x08,
27 LABEL_MV = 0x10,
28 LABEL_NM = 0x20,
29 LABEL_KG = 0x40,
30 LABEL_G = 0x80,
31 LABEL_ALL = 0xFF
33
34 SegLCD_PCF8576_4Seg6SegMaintSegBatUnits(TwoWire& i2c, uint8_t address = DEFAULT_PCF85176_I2C_ADDRESS, uint8_t subaddress = DEFAULT_SUBADDRESS);
35 void init() override;
36 void clear() override;
37 void setBatteryLevel(uint8_t value);
38 void setSignalLevel(uint8_t value);
39 void setLabels(uint8_t labels);
40 void clearLabels(uint8_t labels);
41 void setDegreeSymbol(bool state, uint8_t index = 0);
42 void setMaintenanceSymbol(bool state, uint8_t index = 0);
43 void setCursor(uint8_t row, uint8_t col) override;
44 size_t write(uint8_t ch) override;
45
46 protected:
47 void _setColon(uint8_t row, uint8_t col, bool state) override;
48 void _setDecimal(uint8_t row, uint8_t col, bool state) override;
49
50 private:
51 static constexpr uint8_t ADDR_SIGNAL = 0x0A;
52 static constexpr uint8_t ADDR_BATT = 0x08;
53 static constexpr uint8_t ADDR_SMALL_SEGS = 0x00;
54 static constexpr uint8_t ADDR_LABELS = 0x11;
55 static constexpr uint8_t ADDR_BIG_SEGS = 0x0B;
56
57 static constexpr uint8_t RAM_ADDR_LAST = 0x18;
58 static constexpr uint8_t RAM_BYTE_COUNT = (RAM_ADDR_LAST + 2) / 2;
59
60 uint8_t _buffer_default[6] = {0};
61
62 static constexpr uint8_t FLAG_COLON_TOP = 0x01;
63 static constexpr uint8_t FLAG_COLON_DEFAULT_LEFT = 0x02;
64 static constexpr uint8_t FLAG_COLON_DEFAULT_RIGHT = 0x04;
65
66 // Decimal configuration: column offset -1 (dot belongs to previous position)
67 static constexpr int8_t DECIMAL_COL_OFFSET = -1; // -1: dot belongs to previous position
68 static constexpr uint8_t DECIMAL_TOP_MIN_COL = 0;
69 static constexpr uint8_t DECIMAL_TOP_MAX_COL = 2;
70 static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL = 0;
71 static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL = 4;
72
73 // Colon configuration (separate positions from decimal)
74 static constexpr uint8_t COLON_TOP_COL = 2;
75 static constexpr uint8_t COLON_BOTTOM_LEFT_COL = 2;
76 static constexpr uint8_t COLON_BOTTOM_RIGHT_COL = 4;
77
78 uint8_t _mapSegmentsTop(uint8_t val);
79 uint8_t _mapSegments(uint8_t val);
80 uint8_t _convertLabelFlags(uint8_t labels);
81 size_t _writeRow0(uint8_t ch);
82 size_t _writeRow1(uint8_t ch);
83};
84#endif
PCF8576 LCD segment driver.
Definition SegDriver_PCx85.h:170
static constexpr uint8_t DEFAULT_PCF85176_I2C_ADDRESS
Definition SegDriver_PCx85.h:26
static constexpr uint8_t DEFAULT_SUBADDRESS
Definition SegDriver_PCx85.h:27
4+6 digit dual LCD with maintenance/battery/signal (PCF8576).
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:20
static constexpr uint8_t FLAG_COLON_DEFAULT_LEFT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:63
void clear() override
Clear all visible segments on the display.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:13
static constexpr uint8_t ADDR_SIGNAL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:51
static constexpr uint8_t COLON_TOP_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:74
static constexpr uint8_t DECIMAL_TOP_MAX_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:69
static constexpr uint8_t FLAG_COLON_TOP
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:62
static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:70
void setLabels(uint8_t labels)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:67
static constexpr uint8_t ADDR_SMALL_SEGS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:53
static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:71
void setBatteryLevel(uint8_t value)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:18
static constexpr uint8_t COLON_BOTTOM_LEFT_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:75
void setMaintenanceSymbol(bool state, uint8_t index=0)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:82
uint8_t _buffer_default[6]
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:60
static constexpr uint8_t RAM_ADDR_LAST
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:57
size_t write(uint8_t ch) override
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:287
static constexpr uint8_t COLON_BOTTOM_RIGHT_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:76
size_t _writeRow1(uint8_t ch)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:223
void setCursor(uint8_t row, uint8_t col) override
Set cursor on exact digit.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:163
static constexpr uint8_t RAM_BYTE_COUNT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:58
LabelFlags
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:22
@ LABEL_NM
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:28
@ LABEL_MM
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:26
@ LABEL_KG
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:29
@ LABEL_UEPS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:25
@ LABEL_MV
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:27
@ LABEL_KPA
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:24
@ LABEL_G
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:30
@ LABEL_ALL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:31
@ LABEL_MPA
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:23
void init() override
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:8
void _setColon(uint8_t row, uint8_t col, bool state) override
Virtual method for setting colon.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:87
size_t _writeRow0(uint8_t ch)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:180
uint8_t _convertLabelFlags(uint8_t labels)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:54
static constexpr uint8_t FLAG_COLON_DEFAULT_RIGHT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:64
uint8_t _mapSegmentsTop(uint8_t val)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:299
void setDegreeSymbol(bool state, uint8_t index=0)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:77
uint8_t _mapSegments(uint8_t val)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:310
static constexpr uint8_t ADDR_LABELS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:54
static constexpr uint8_t ADDR_BIG_SEGS
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:55
void setSignalLevel(uint8_t value)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:37
void _setDecimal(uint8_t row, uint8_t col, bool state) override
Virtual method for setting decimal point.
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:114
void clearLabels(uint8_t labels)
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.cpp:72
static constexpr uint8_t ADDR_BATT
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:52
static constexpr uint8_t DECIMAL_TOP_MIN_COL
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:68
static constexpr int8_t DECIMAL_COL_OFFSET
Definition SegLCD_PCF8576_4Seg6SegMaintSegBatUnits.h:67