SegLCDLib
Loading...
Searching...
No Matches
SegLCD_PCF85176_TempHum.h
Go to the documentation of this file.
1#ifndef SEGLCD_PCF85176_TEMPHUM_H
2#define SEGLCD_PCF85176_TEMPHUM_H
3
4
5#if !defined(SEGLCD_DISABLE_ALL_LCDS) || defined(SEGLCD_ENABLE_PCF85176_TEMPHUM)
7
22 public:
23 typedef enum : uint8_t {
26 } UnitFlags;
27
28 SegLCD_PCF85176_TempHumidity(SegTransportI2C& transport, uint8_t address = DEFAULT_PCX85_I2C_ADDRESS, uint8_t subaddress = DEFAULT_SUBADDRESS);
29 void init() override;
30 void clear() override;
31 void setBatteryLevel(uint8_t value);
32 void setSignalLevel(uint8_t value);
33 void setUnits(uint8_t units);
34 void clearUnits(uint8_t units);
35 void setCursor(uint8_t row, uint8_t col) override;
36 using SegLCDLib::write;
37 size_t write(uint8_t ch) override;
38
39 private:
40 void _updateUnits(uint8_t units, bool set);
41 void _setDecimal(uint8_t row, uint8_t col, bool state) override;
42 static constexpr uint8_t ADDR_SIGNAL_BATT = 14;
43 static constexpr uint8_t ADDR_TEMP_SEGS = 0;
44 static constexpr uint8_t ADDR_HUM_SEGS = 8;
45
46 static constexpr uint8_t RAM_SIZE = 8;
47 static constexpr uint8_t OFFSET_SIGBATT = 7;
48 static constexpr uint8_t OFFSET_TEMP = 0;
49 static constexpr uint8_t OFFSET_HUM = 4;
50
51 static constexpr uint8_t FLAG_MINUS_DISPLAYED = 0x01;
52
53 // Display-specific constants
54 static constexpr uint8_t TEMP_DIGITS = 4;
55 static constexpr uint8_t HUM_DIGITS = 3;
56 static constexpr uint8_t TEMP_ROW = 0;
57 static constexpr uint8_t HUM_ROW = 1;
58
59 // Label column positions (last digit in each row)
60 static constexpr uint8_t LABEL_TEMP_COL = TEMP_DIGITS - 1; // Col 3 for C
61 static constexpr uint8_t LABEL_HUM_COL = HUM_DIGITS - 1; // Col 2 for %
62
63 // Decimal configuration for write() flow (dot belongs to previous position).
64 // Values are logical cursor ranges passed to _dotWrite().
65 static constexpr uint8_t DECIMAL_TOP_MIN_COL = 0;
66 static constexpr uint8_t DECIMAL_TOP_MAX_COL = TEMP_DIGITS - 1;
67 static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL = 1;
68 static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL = HUM_DIGITS - 1;
69 static constexpr int8_t DECIMAL_COL_OFFSET = -1; // -1: dot belongs to previous position
70
71 // TempHum specific bit positions
72 static constexpr uint8_t DECIMAL_POINT_BIT = 0x08;
73 static constexpr uint8_t LABEL_BIT = 0x08;
74 static constexpr uint8_t MINUS_SIGN_BIT = 0x08;
75
76 // Signal/Battery level constants (TempHum specific)
77 static constexpr uint8_t MAX_SIGNAL_BATTERY_LEVEL = 4;
78 static constexpr uint8_t SIGNAL_BATTERY_MASK_LOW = 0x0F;
79 static constexpr uint8_t SIGNAL_BATTERY_MASK_HIGH = 0xF0;
80
81 // Label address offsets
82 static constexpr uint8_t TEMP_LABEL_OFFSET = 6;
83 static constexpr uint8_t HUM_LABEL_OFFSET = 4;
84
85 // Signal/Battery bit patterns (TempHum specific)
86 static constexpr uint8_t SIGNAL_LEVEL_BITS[4] = {0x10, 0x20, 0x40, 0x80};
87 static constexpr uint8_t BATTERY_LEVEL_BITS[4] = {8, 4, 2, 1};
88
89 uint8_t _mapSegments(uint8_t val);
90};
91#endif
92
93#endif
Implementation of the PCF85176 controllers.
Definition SegDriver_PCF85176.h:9
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
Temperature/humidity LCD with dual rows (PCF85176).
Definition SegLCD_PCF85176_TempHum.h:21
static constexpr uint8_t LABEL_TEMP_COL
Definition SegLCD_PCF85176_TempHum.h:60
static constexpr uint8_t RAM_SIZE
Definition SegLCD_PCF85176_TempHum.h:46
static constexpr uint8_t HUM_LABEL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:83
static constexpr int8_t DECIMAL_COL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:69
void _updateUnits(uint8_t units, bool set)
Definition SegLCD_PCF85176_TempHum.cpp:57
static constexpr uint8_t OFFSET_SIGBATT
Definition SegLCD_PCF85176_TempHum.h:47
static constexpr uint8_t LABEL_HUM_COL
Definition SegLCD_PCF85176_TempHum.h:61
static constexpr uint8_t SIGNAL_BATTERY_MASK_HIGH
Definition SegLCD_PCF85176_TempHum.h:79
uint8_t _mapSegments(uint8_t val)
Definition SegLCD_PCF85176_TempHum.cpp:190
static constexpr uint8_t SIGNAL_BATTERY_MASK_LOW
Definition SegLCD_PCF85176_TempHum.h:78
static constexpr uint8_t HUM_DIGITS
Definition SegLCD_PCF85176_TempHum.h:55
static constexpr uint8_t TEMP_ROW
Definition SegLCD_PCF85176_TempHum.h:56
static constexpr uint8_t OFFSET_HUM
Definition SegLCD_PCF85176_TempHum.h:49
static constexpr uint8_t DECIMAL_TOP_MIN_COL
Definition SegLCD_PCF85176_TempHum.h:65
void init() override
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCD_PCF85176_TempHum.cpp:9
static constexpr uint8_t ADDR_HUM_SEGS
Definition SegLCD_PCF85176_TempHum.h:44
static constexpr uint8_t TEMP_DIGITS
Definition SegLCD_PCF85176_TempHum.h:54
void setBatteryLevel(uint8_t value)
Definition SegLCD_PCF85176_TempHum.cpp:19
static constexpr uint8_t FLAG_MINUS_DISPLAYED
Definition SegLCD_PCF85176_TempHum.h:51
static constexpr uint8_t MINUS_SIGN_BIT
Definition SegLCD_PCF85176_TempHum.h:74
static constexpr uint8_t TEMP_LABEL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:82
static constexpr uint8_t LABEL_BIT
Definition SegLCD_PCF85176_TempHum.h:73
size_t write(uint8_t ch) override
Definition SegLCD_PCF85176_TempHum.cpp:112
static constexpr uint8_t BATTERY_LEVEL_BITS[4]
Definition SegLCD_PCF85176_TempHum.h:87
UnitFlags
Definition SegLCD_PCF85176_TempHum.h:23
@ UNIT_PERCENT
Definition SegLCD_PCF85176_TempHum.h:25
@ UNIT_DEGREE_C
Definition SegLCD_PCF85176_TempHum.h:24
void _setDecimal(uint8_t row, uint8_t col, bool state) override
Virtual method for setting decimal point.
Definition SegLCD_PCF85176_TempHum.cpp:75
void clearUnits(uint8_t units)
Definition SegLCD_PCF85176_TempHum.cpp:71
void setCursor(uint8_t row, uint8_t col) override
Set cursor on exact digit.
Definition SegLCD_PCF85176_TempHum.cpp:104
void setUnits(uint8_t units)
Definition SegLCD_PCF85176_TempHum.cpp:67
static constexpr uint8_t DECIMAL_TOP_MAX_COL
Definition SegLCD_PCF85176_TempHum.h:66
void clear() override
Clear all visible segments on the display.
Definition SegLCD_PCF85176_TempHum.cpp:14
static constexpr uint8_t HUM_ROW
Definition SegLCD_PCF85176_TempHum.h:57
static constexpr uint8_t DECIMAL_POINT_BIT
Definition SegLCD_PCF85176_TempHum.h:72
static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL
Definition SegLCD_PCF85176_TempHum.h:67
static constexpr uint8_t ADDR_TEMP_SEGS
Definition SegLCD_PCF85176_TempHum.h:43
static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL
Definition SegLCD_PCF85176_TempHum.h:68
static constexpr uint8_t MAX_SIGNAL_BATTERY_LEVEL
Definition SegLCD_PCF85176_TempHum.h:77
static constexpr uint8_t SIGNAL_LEVEL_BITS[4]
Definition SegLCD_PCF85176_TempHum.h:86
static constexpr uint8_t OFFSET_TEMP
Definition SegLCD_PCF85176_TempHum.h:48
void setSignalLevel(uint8_t value)
Definition SegLCD_PCF85176_TempHum.cpp:38
static constexpr uint8_t ADDR_SIGNAL_BATT
Definition SegLCD_PCF85176_TempHum.h:42
Abstract I2C transport.
Definition SegTransport.h:54