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#include <Wire.h>
5#include <SegDriver_PCx85.h>
6
21 public:
22 typedef enum {
24 LABEL_PROC = 0x02,
25 } LabelFlags;
26
27 SegLCD_PCF85176_TempHumidity(TwoWire& i2c, uint8_t address = DEFAULT_PCF85176_I2C_ADDRESS, uint8_t subaddress = DEFAULT_SUBADDRESS);
28 void init() override;
29 void clear() override;
30 void setBatteryLevel(uint8_t value);
31 void setSignalLevel(uint8_t value);
32 void setLabels(uint8_t labels);
33 void clearLabels(uint8_t labels);
34 void setCursor(uint8_t row, uint8_t col) override;
35 size_t write(uint8_t ch) override;
36
37 private:
38 void _setDecimal(uint8_t row, uint8_t col, bool state) override;
39 static constexpr uint8_t ADDR_SIGNAL_BATT = 14;
40 static constexpr uint8_t ADDR_TEMP_SEGS = 0;
41 static constexpr uint8_t ADDR_HUM_SEGS = 8;
42
43 static constexpr uint8_t RAM_SIZE = 8;
44 static constexpr uint8_t OFFSET_SIGBATT = 7;
45 static constexpr uint8_t OFFSET_TEMP = 0;
46 static constexpr uint8_t OFFSET_HUM = 4;
47
48 static constexpr uint8_t FLAG_MINUS_DISPLAYED = 0x01;
49
50 // Display-specific constants
51 static constexpr uint8_t TEMP_DIGITS = 4;
52 static constexpr uint8_t HUM_DIGITS = 3;
53 static constexpr uint8_t TEMP_ROW = 0;
54 static constexpr uint8_t HUM_ROW = 1;
55
56 // Label column positions (last digit in each row)
57 static constexpr uint8_t LABEL_TEMP_COL = TEMP_DIGITS - 1; // Col 3 for C
58 static constexpr uint8_t LABEL_HUM_COL = HUM_DIGITS - 1; // Col 2 for %
59
60 // Decimal configuration for write() flow (dot belongs to previous position).
61 // Values are logical cursor ranges passed to _dotWrite().
62 static constexpr uint8_t DECIMAL_TOP_MIN_COL = 0;
63 static constexpr uint8_t DECIMAL_TOP_MAX_COL = TEMP_DIGITS - 1;
64 static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL = 1;
65 static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL = HUM_DIGITS - 1;
66 static constexpr int8_t DECIMAL_COL_OFFSET = -1; // -1: dot belongs to previous position
67
68 // TempHum specific bit positions
69 static constexpr uint8_t DECIMAL_POINT_BIT = 0x08;
70 static constexpr uint8_t LABEL_BIT = 0x08;
71 static constexpr uint8_t MINUS_SIGN_BIT = 0x08;
72
73 // Signal/Battery level constants (TempHum specific)
74 static constexpr uint8_t MAX_SIGNAL_BATTERY_LEVEL = 4;
75 static constexpr uint8_t SIGNAL_BATTERY_MASK_LOW = 0x0F;
76 static constexpr uint8_t SIGNAL_BATTERY_MASK_HIGH = 0xF0;
77
78 // Label address offsets
79 static constexpr uint8_t TEMP_LABEL_OFFSET = 6;
80 static constexpr uint8_t HUM_LABEL_OFFSET = 4;
81
82 // Signal/Battery bit patterns (TempHum specific)
83 static constexpr uint8_t SIGNAL_LEVEL_BITS[4] = {0x10, 0x20, 0x40, 0x80};
84 static constexpr uint8_t BATTERY_LEVEL_BITS[4] = {8, 4, 2, 1};
85
86 uint8_t _mapSegments(uint8_t val);
87};
88#endif
Implementation of the PCF85176 controllers.
Definition SegDriver_PCx85.h:144
static constexpr uint8_t DEFAULT_PCF85176_I2C_ADDRESS
Definition SegDriver_PCx85.h:26
static constexpr uint8_t DEFAULT_SUBADDRESS
Definition SegDriver_PCx85.h:27
Temperature/humidity LCD with dual rows (PCF85176).
Definition SegLCD_PCF85176_TempHum.h:20
static constexpr uint8_t LABEL_TEMP_COL
Definition SegLCD_PCF85176_TempHum.h:57
static constexpr uint8_t RAM_SIZE
Definition SegLCD_PCF85176_TempHum.h:43
static constexpr uint8_t HUM_LABEL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:80
static constexpr int8_t DECIMAL_COL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:66
static constexpr uint8_t OFFSET_SIGBATT
Definition SegLCD_PCF85176_TempHum.h:44
static constexpr uint8_t LABEL_HUM_COL
Definition SegLCD_PCF85176_TempHum.h:58
static constexpr uint8_t SIGNAL_BATTERY_MASK_HIGH
Definition SegLCD_PCF85176_TempHum.h:76
uint8_t _mapSegments(uint8_t val)
Definition SegLCD_PCF85176_TempHum.cpp:216
static constexpr uint8_t SIGNAL_BATTERY_MASK_LOW
Definition SegLCD_PCF85176_TempHum.h:75
void setLabels(uint8_t labels)
Definition SegLCD_PCF85176_TempHum.cpp:56
static constexpr uint8_t HUM_DIGITS
Definition SegLCD_PCF85176_TempHum.h:52
static constexpr uint8_t TEMP_ROW
Definition SegLCD_PCF85176_TempHum.h:53
static constexpr uint8_t OFFSET_HUM
Definition SegLCD_PCF85176_TempHum.h:46
static constexpr uint8_t DECIMAL_TOP_MIN_COL
Definition SegLCD_PCF85176_TempHum.h:62
void init() override
Logical display sections that can be targeted by higher-level rendering logic.
Definition SegLCD_PCF85176_TempHum.cpp:8
static constexpr uint8_t ADDR_HUM_SEGS
Definition SegLCD_PCF85176_TempHum.h:41
static constexpr uint8_t TEMP_DIGITS
Definition SegLCD_PCF85176_TempHum.h:51
void setBatteryLevel(uint8_t value)
Definition SegLCD_PCF85176_TempHum.cpp:18
LabelFlags
Definition SegLCD_PCF85176_TempHum.h:22
@ LABEL_PROC
Definition SegLCD_PCF85176_TempHum.h:24
@ LABEL_DEGREE_C
Definition SegLCD_PCF85176_TempHum.h:23
static constexpr uint8_t FLAG_MINUS_DISPLAYED
Definition SegLCD_PCF85176_TempHum.h:48
static constexpr uint8_t MINUS_SIGN_BIT
Definition SegLCD_PCF85176_TempHum.h:71
static constexpr uint8_t TEMP_LABEL_OFFSET
Definition SegLCD_PCF85176_TempHum.h:79
static constexpr uint8_t LABEL_BIT
Definition SegLCD_PCF85176_TempHum.h:70
size_t write(uint8_t ch) override
Definition SegLCD_PCF85176_TempHum.cpp:128
static constexpr uint8_t BATTERY_LEVEL_BITS[4]
Definition SegLCD_PCF85176_TempHum.h:84
void _setDecimal(uint8_t row, uint8_t col, bool state) override
Virtual method for setting decimal point.
Definition SegLCD_PCF85176_TempHum.cpp:82
void setCursor(uint8_t row, uint8_t col) override
Set cursor on exact digit.
Definition SegLCD_PCF85176_TempHum.cpp:120
static constexpr uint8_t DECIMAL_TOP_MAX_COL
Definition SegLCD_PCF85176_TempHum.h:63
void clear() override
Clear all visible segments on the display.
Definition SegLCD_PCF85176_TempHum.cpp:13
static constexpr uint8_t HUM_ROW
Definition SegLCD_PCF85176_TempHum.h:54
static constexpr uint8_t DECIMAL_POINT_BIT
Definition SegLCD_PCF85176_TempHum.h:69
static constexpr uint8_t DECIMAL_BOTTOM_MIN_COL
Definition SegLCD_PCF85176_TempHum.h:64
static constexpr uint8_t ADDR_TEMP_SEGS
Definition SegLCD_PCF85176_TempHum.h:40
static constexpr uint8_t DECIMAL_BOTTOM_MAX_COL
Definition SegLCD_PCF85176_TempHum.h:65
static constexpr uint8_t MAX_SIGNAL_BATTERY_LEVEL
Definition SegLCD_PCF85176_TempHum.h:74
static constexpr uint8_t SIGNAL_LEVEL_BITS[4]
Definition SegLCD_PCF85176_TempHum.h:83
static constexpr uint8_t OFFSET_TEMP
Definition SegLCD_PCF85176_TempHum.h:45
void setSignalLevel(uint8_t value)
Definition SegLCD_PCF85176_TempHum.cpp:37
static constexpr uint8_t ADDR_SIGNAL_BATT
Definition SegLCD_PCF85176_TempHum.h:39
void clearLabels(uint8_t labels)
Definition SegLCD_PCF85176_TempHum.cpp:69