kopia lustrzana https://github.com/gshau/SQM_TSL2591
commit
17033bb23a
|
@ -119,6 +119,19 @@ void SQM_TSL2591::disable(void) {
|
||||||
TSL2591_ENABLE_POWEROFF);
|
TSL2591_ENABLE_POWEROFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SQM_TSL2591::setTemperatureCalibration (const temperatureCalibration &calibrationData) {
|
||||||
|
_temperatureCalibration = calibrationData;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SQM_TSL2591::setTemperature (float temperature) {
|
||||||
|
_hasTemperature = true;
|
||||||
|
_temperature = temperature;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SQM_TSL2591::resetTemperature () {
|
||||||
|
_hasTemperature = false;
|
||||||
|
}
|
||||||
|
|
||||||
void SQM_TSL2591::setGain(tsl2591Gain_t gain) {
|
void SQM_TSL2591::setGain(tsl2591Gain_t gain) {
|
||||||
if (!_initialized) {
|
if (!_initialized) {
|
||||||
if (!begin()) {
|
if (!begin()) {
|
||||||
|
@ -305,6 +318,28 @@ void SQM_TSL2591::bumpTime(int bumpDirection) {
|
||||||
setTiming(config.time);
|
setTiming(config.time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SQM_TSL2591::calibrateReadingsForTemperature(uint16_t &ir, uint16_t &full) {
|
||||||
|
if (_hasTemperature) {
|
||||||
|
if (verbose) {
|
||||||
|
Serial.print("Values before temperature calibration: ir=");
|
||||||
|
Serial.print(ir);
|
||||||
|
Serial.print(", full=");
|
||||||
|
Serial.println(full);
|
||||||
|
}
|
||||||
|
float irCalibrationFactor = _temperature * _temperatureCalibration.irSlope + _temperatureCalibration.irIntercept;
|
||||||
|
float fullCalibrationFactor = _temperature * _temperatureCalibration.fullLuminositySlope + _temperatureCalibration.fullLuminosityIntercept;
|
||||||
|
ir = static_cast<uint16_t>(static_cast<float>(ir) * irCalibrationFactor);
|
||||||
|
full = static_cast<uint16_t>(static_cast<float>(full) * fullCalibrationFactor);
|
||||||
|
if (verbose) {
|
||||||
|
Serial.print("Values after temperature calibration: ir=");
|
||||||
|
Serial.print(ir);
|
||||||
|
Serial.print(", full=");
|
||||||
|
Serial.println(full);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void SQM_TSL2591::takeReading(void) {
|
void SQM_TSL2591::takeReading(void) {
|
||||||
uint32_t lum;
|
uint32_t lum;
|
||||||
niter = 1;
|
niter = 1;
|
||||||
|
@ -312,6 +347,7 @@ void SQM_TSL2591::takeReading(void) {
|
||||||
lum = getFullLuminosity();
|
lum = getFullLuminosity();
|
||||||
ir = lum >> 16;
|
ir = lum >> 16;
|
||||||
full = lum & 0xFFFF;
|
full = lum & 0xFFFF;
|
||||||
|
calibrateReadingsForTemperature(ir, full);
|
||||||
vis = full - ir;
|
vis = full - ir;
|
||||||
if ((float)full < (float)ir) {
|
if ((float)full < (float)ir) {
|
||||||
if (verbose) {
|
if (verbose) {
|
||||||
|
@ -347,6 +383,7 @@ void SQM_TSL2591::takeReading(void) {
|
||||||
lum = getFullLuminosity();
|
lum = getFullLuminosity();
|
||||||
ir = lum >> 16;
|
ir = lum >> 16;
|
||||||
full = lum & 0xFFFF;
|
full = lum & 0xFFFF;
|
||||||
|
calibrateReadingsForTemperature(ir, full);
|
||||||
fullCumulative += full;
|
fullCumulative += full;
|
||||||
irCumulative += ir;
|
irCumulative += ir;
|
||||||
visCumulative = fullCumulative - irCumulative;
|
visCumulative = fullCumulative - irCumulative;
|
||||||
|
|
|
@ -128,6 +128,13 @@ typedef struct {
|
||||||
tsl2591IntegrationTime_t time;
|
tsl2591IntegrationTime_t time;
|
||||||
} sensorConfig;
|
} sensorConfig;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
float fullLuminositySlope = 0.000705244123;
|
||||||
|
float fullLuminosityIntercept = 0.9794303797;
|
||||||
|
float irSlope = -0.001939421338;
|
||||||
|
float irIntercept = 1.05;
|
||||||
|
} temperatureCalibration;
|
||||||
|
|
||||||
|
|
||||||
class SQM_TSL2591 : public Adafruit_Sensor
|
class SQM_TSL2591 : public Adafruit_Sensor
|
||||||
{
|
{
|
||||||
|
@ -141,11 +148,14 @@ class SQM_TSL2591 : public Adafruit_Sensor
|
||||||
uint16_t read16 ( uint8_t reg );
|
uint16_t read16 ( uint8_t reg );
|
||||||
uint8_t read8 ( uint8_t reg );
|
uint8_t read8 ( uint8_t reg );
|
||||||
|
|
||||||
float calculateLux ( uint16_t ch0, uint16_t ch1 );
|
float calculateLux ( uint16_t ch0, uint16_t ch1 );
|
||||||
void setGain ( tsl2591Gain_t gain );
|
void setGain ( tsl2591Gain_t gain );
|
||||||
void setTiming ( tsl2591IntegrationTime_t integration );
|
void setTiming ( tsl2591IntegrationTime_t integration );
|
||||||
void setCalibrationOffset ( float calibrationOffset);
|
void setCalibrationOffset ( float calibrationOffset);
|
||||||
uint32_t getFullLuminosity ( );
|
uint32_t getFullLuminosity ( );
|
||||||
|
void setTemperatureCalibration ( const temperatureCalibration &calibrationData);
|
||||||
|
void setTemperature ( float temperature);
|
||||||
|
void resetTemperature ( );
|
||||||
|
|
||||||
tsl2591IntegrationTime_t getTiming();
|
tsl2591IntegrationTime_t getTiming();
|
||||||
tsl2591Gain_t getGain();
|
tsl2591Gain_t getGain();
|
||||||
|
@ -172,6 +182,10 @@ class SQM_TSL2591 : public Adafruit_Sensor
|
||||||
tsl2591Gain_t _gain;
|
tsl2591Gain_t _gain;
|
||||||
int32_t _sensorID;
|
int32_t _sensorID;
|
||||||
float _calibrationOffset;
|
float _calibrationOffset;
|
||||||
|
temperatureCalibration _temperatureCalibration;
|
||||||
|
float _temperature;
|
||||||
|
bool _hasTemperature = false;
|
||||||
|
void calibrateReadingsForTemperature(uint16_t &ir, uint16_t &full);
|
||||||
|
|
||||||
boolean _initialized;
|
boolean _initialized;
|
||||||
};
|
};
|
||||||
|
|
Ładowanie…
Reference in New Issue