16 #ifndef __SENSORS_MAX44009_h__
17 #define __SENSORS_MAX44009_h__
22 #if defined(ARDUINO) && ARDUINO >= 100
29 #define MAX44009_CONFIGURATION 0x02
30 #define MAX44009_LUX_READING_HIGH 0x03
31 #define MAX44009_LUX_READING_LOW 0x04
34 #define MAX44009_CFG_CONTINUOUS 0x80
35 #define MAX44009_CFG_MANUAL 0x40
36 #define MAX44009_CFG_CDR 0x08
37 #define MAX44009_CFG_TIMER 0x07
41 template <
byte ADDRESS=0x4a, u
int8_t CDR=0x01, u
int8_t TIM=0x03>
47 uint8_t err = getError();
51 setManualMode(CDR, TIM);
52 DPRINTLN(F(
"MAX44009 Sensor OK"));
54 DPRINT(F(
"MAX44009 Sensor Error "));DDECLN(err);
57 void measure (__attribute__((unused))
bool async=
false) {
58 if( present() ==
true ) {
59 _brightness = getLux() / 100;
60 uint8_t err = getError();
69 uint32_t getLux(
void) {
70 uint8_t dhi = read(MAX44009_LUX_READING_HIGH);
71 uint8_t dlo = read(MAX44009_LUX_READING_LOW);
73 uint32_t m = ((dhi & 0x0F) << 4) + (dlo & 0x0F);
75 uint32_t val = m * 45;
83 void setConfiguration(
const uint8_t value) {
84 write(MAX44009_CONFIGURATION, value);
87 uint8_t getConfiguration() {
88 return read(MAX44009_CONFIGURATION);
91 void setAutomaticMode() {
92 uint8_t config = read(MAX44009_CONFIGURATION);
93 config &= ~MAX44009_CFG_CONTINUOUS;
94 config &= ~MAX44009_CFG_MANUAL;
95 write(MAX44009_CONFIGURATION, config);
98 void setContinuousMode() {
99 uint8_t config = read(MAX44009_CONFIGURATION);
100 config |= MAX44009_CFG_CONTINUOUS;
101 config &= ~MAX44009_CFG_MANUAL;
102 write(MAX44009_CONFIGURATION, config);
105 void setManualMode(uint8_t _CDR, uint8_t _TIM) {
106 if (_CDR != 0) _CDR = 1;
107 if (_TIM > 7) _TIM = 7;
108 uint8_t config = read(MAX44009_CONFIGURATION);
109 config &= ~MAX44009_CFG_CONTINUOUS;
110 config |= MAX44009_CFG_MANUAL;
112 config |= _CDR << 3 | TIM;
113 write(MAX44009_CONFIGURATION, config);
116 uint8_t read(uint8_t reg) {
117 Wire.beginTransmission(ADDRESS);
119 _error = Wire.endTransmission();
123 if (Wire.requestFrom(ADDRESS, (uint8_t) 1) != 1) {
128 _data = Wire.receive();
135 void write(uint8_t reg, uint8_t value) {
136 Wire.beginTransmission(ADDRESS);
139 _error = Wire.endTransmission();