// -----------------------------------------------------------------------------
|
|
// SI1145 Sensor over I2C
|
|
// Copyright (C) 2020 by @HilverinkJ (https://github.com/HilverinkJ)
|
|
// Based on https://github.com/xoseperez/espurna/issues/2192#issuecomment-603430308
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#if SENSOR_SUPPORT && SI1145_SUPPORT
|
|
|
|
#pragma once
|
|
|
|
#include <Arduino.h>
|
|
#include <Adafruit_SI1145.h>
|
|
|
|
#include "I2CSensor.h"
|
|
|
|
class SI1145Sensor : public I2CSensor<> {
|
|
|
|
public:
|
|
|
|
SI1145Sensor() {
|
|
_count = 1;
|
|
_sensor_id = SENSOR_SI1145_ID;
|
|
_si1145 = new Adafruit_SI1145();
|
|
}
|
|
|
|
void begin() {
|
|
static unsigned char addresses[1] = { SI1145_ADDRESS };
|
|
_address = _begin_i2c(_address, sizeof(addresses), addresses);
|
|
if (_address == 0) return;
|
|
|
|
if (!_si1145->begin()) {
|
|
_ready = false;
|
|
return;
|
|
}
|
|
|
|
// Adafruit library never sets any errors
|
|
_error = SENSOR_ERROR_OK;
|
|
|
|
_ready = true;
|
|
}
|
|
|
|
// ---------------------------------------------------------------------
|
|
// Sensor API
|
|
// ---------------------------------------------------------------------
|
|
|
|
// Descriptive name of the sensor
|
|
String description() {
|
|
char buffer[25];
|
|
snprintf(buffer, sizeof(buffer), "SI1145 @ I2C (0x%02X)", _address);
|
|
return String(buffer);
|
|
}
|
|
|
|
// Descriptive name of the slot # index
|
|
String slot(unsigned char index) {
|
|
return description();
|
|
};
|
|
|
|
// Type for slot # index
|
|
unsigned char type(unsigned char index) {
|
|
if (index == 0) return MAGNITUDE_UVI;
|
|
return MAGNITUDE_NONE;
|
|
}
|
|
|
|
// Pre-read hook (usually to populate registers with up-to-date data)
|
|
void pre() {
|
|
_uvi = _si1145->readUV() / 100.0;
|
|
}
|
|
|
|
// Current value for slot # index
|
|
double value(unsigned char index) {
|
|
if (index == 0) return _uvi;
|
|
return 0.0;
|
|
}
|
|
|
|
protected:
|
|
Adafruit_SI1145 * _si1145 = nullptr;
|
|
double _uvi = 0.0;
|
|
};
|
|
|
|
#endif // SENSOR_SUPPORT && SI1145_SUPPORT
|