-
Notifications
You must be signed in to change notification settings - Fork 1
/
Brightness.h
132 lines (112 loc) · 3.68 KB
/
Brightness.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
* Dynamic display brightness adjustment algorithm
*
* This source file is part of the Nixie Clock Arduino firmware
* found under http://www.github.com/microfarad-de/nixie-clock
*
* Please visit:
* http://www.microfarad.de
* http://www.github.com/microfarad-de
*
* Copyright (C) 2019 Karim Hraibi (khraibi at gmail.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __BRIGHTNESS_H
#define __BRIGHTNESS_H
#include <Arduino.h>
/*
* Size in bytes of the brightness lookup table (LUT)
*/
#define BRIGHTNESS_LUT_SIZE 64
/*
* Brightness adjustment class
*/
class BrightnessClass {
public:
/*
* Initial initialization
* Parameters:
* eepromAddr : lookup table address within EEPROM
* range = 0..(EEPROM.length() - BRIGHTNESS_LUT_SIZE)
* boostPin : digital pin connected to the brightness boost circuitry
* boostEnabled : enables the brightness boost feature
*/
void initialize (uint16_t eepromAddr, uint8_t boostPin = 0);
/*
* Initialize the brightness LUT on first-time boot
*/
void initializeLut (void);
/*
* Enables/disables the auto brightness feature
* Parameters:
* enable : true/false
*/
void autoEnable (bool enable);
/*
* Enables/disables the boost feature
* Parameters:
* enable : true/false
*/
void boostEnable (bool enable);
/*
* Turn-off brightness boost circuitry
*/
void boostDeactivate (void);
/*
* Apply new value from light sensor
* Parameters:
* value : light sensor value [0..1023] (0 = brightest, 1023 = darkest)
* Returns:
* brightness value [0..99]
*/
uint8_t lightSensorUpdate (int16_t value);
/*
* Increase brightness by 1 increment
* Returns:
* brightness value [0..99]
*/
uint8_t increase (void);
/*
* Decrease brightness by 1 increment
* Returns:
* brightness value [0..99]
*/
uint8_t decrease (void);
/*
* Set the brightneess temporarily to the maximum value
* does not update the LUT
* Returns:
* brightness value [0..99]
*/
uint8_t maximum (void);
/*
* Write-back the lookup table into EEPROM
*/
void eepromWrite (void);
private:
void interpolate (void); // Interpolate the entries of the LUT
uint8_t boost (uint8_t value); // controls the brightness boost circuitry
uint16_t eepromAddr; // LUT within EEPROM
uint8_t boostPin; // digital pin for controlling the boost circuitry
bool boostEnabled; // enables the boost feature
bool autoEnabled; // enables the auto brightness feature
uint8_t lutIdx; // index of the brightness LUT element
uint8_t lut[BRIGHTNESS_LUT_SIZE] = { 0 }; // brightness lookup table
};
/*
* Brightness control object as a singleton
*/
extern BrightnessClass Brightness;
#endif // __BRIGHTNESS_H