98 lines
2.6 KiB
C
98 lines
2.6 KiB
C
|
#ifndef MAX44009_H
|
||
|
#define MAX44009_H
|
||
|
//
|
||
|
// FILE: Max44009.h
|
||
|
// AUTHOR: Rob dot Tillaart at gmail dot com
|
||
|
// VERSION: 0.1.9
|
||
|
// PURPOSE: library for MAX44009 lux sensor Arduino
|
||
|
// HISTORY: See Max440099.cpp
|
||
|
//
|
||
|
// Released to the public domain
|
||
|
//
|
||
|
|
||
|
#include "Wire.h"
|
||
|
|
||
|
#if defined(ARDUINO) && ARDUINO >= 100
|
||
|
#include "Arduino.h"
|
||
|
#else
|
||
|
#include "WProgram.h"
|
||
|
#endif
|
||
|
|
||
|
#define MAX44009_LIB_VERSION "0.1.9"
|
||
|
|
||
|
// I2C ADDRESSES
|
||
|
#define MAX44009_A0_LOW 0x4A
|
||
|
#define MAX44009_A0_HIGH 0x4B
|
||
|
|
||
|
// REGISTERS
|
||
|
#define MAX44009_INTERRUPT_STATUS 0x00
|
||
|
#define MAX44009_INTERRUPT_ENABLE 0x01
|
||
|
#define MAX44009_CONFIGURATION 0x02
|
||
|
#define MAX44009_LUX_READING_HIGH 0x03
|
||
|
#define MAX44009_LUX_READING_LOW 0x04
|
||
|
#define MAX44009_THRESHOLD_HIGH 0x05
|
||
|
#define MAX44009_THRESHOLD_LOW 0x06
|
||
|
#define MAX44009_THRESHOLD_TIMER 0x07
|
||
|
|
||
|
// CONFIGURATION MASKS
|
||
|
#define MAX44009_CFG_CONTINUOUS 0x80
|
||
|
#define MAX44009_CFG_MANUAL 0x40
|
||
|
#define MAX44009_CFG_CDR 0x08
|
||
|
#define MAX44009_CFG_TIMER 0x07
|
||
|
|
||
|
|
||
|
class Max44009
|
||
|
{
|
||
|
public:
|
||
|
// dataPin and clockPin are only used by ESP8266
|
||
|
// for UNO ignore these (and its warning)
|
||
|
Max44009(const uint8_t address, const uint8_t dataPin = 5, const uint8_t clockPin = 4);
|
||
|
Max44009(const uint8_t address, bool continuousMode);
|
||
|
|
||
|
float getLux();
|
||
|
int getError();
|
||
|
|
||
|
void setHighThreshold(const float);
|
||
|
float getHighThreshold(void);
|
||
|
void setLowThreshold(const float);
|
||
|
float getLowThreshold(void);
|
||
|
void setThresholdTimer(const uint8_t);
|
||
|
uint8_t getThresholdTimer();
|
||
|
|
||
|
void enableInterrupt() { write(MAX44009_INTERRUPT_ENABLE, 1); };
|
||
|
void disableInterrupt() { write(MAX44009_INTERRUPT_ENABLE, 0); };
|
||
|
bool interruptEnabled() { return read(MAX44009_INTERRUPT_ENABLE) & 0x01; };
|
||
|
uint8_t getInterruptStatus() { return read(MAX44009_INTERRUPT_STATUS) & 0x01; };
|
||
|
|
||
|
// check datasheet for detailed behavior
|
||
|
void setConfiguration(uint8_t);
|
||
|
uint8_t getConfiguration();
|
||
|
void setAutomaticMode();
|
||
|
void setContinuousMode();
|
||
|
// CDR = Current Divisor Ratio
|
||
|
// CDR = 1 ==> only 1/8th is measured
|
||
|
// TIM = Time Integration Measurement (table)
|
||
|
// 000 800ms
|
||
|
// 001 400ms
|
||
|
// 010 200ms
|
||
|
// 011 100ms
|
||
|
// 100 50ms
|
||
|
// 101 25ms
|
||
|
// 110 12.5ms
|
||
|
// 111 6.25ms
|
||
|
void setManualMode(uint8_t CDR, uint8_t TIM);
|
||
|
|
||
|
private:
|
||
|
void setThreshold(uint8_t, float);
|
||
|
float getThreshold(uint8_t);
|
||
|
|
||
|
uint8_t read(uint8_t reg);
|
||
|
void write(uint8_t, uint8_t);
|
||
|
|
||
|
uint8_t _address;
|
||
|
uint8_t _data;
|
||
|
int _error;
|
||
|
};
|
||
|
#endif
|
||
|
|
||
|
// END OF FILE
|