mirror of
https://github.com/meshtastic/firmware.git
synced 2025-12-16 07:42:37 +00:00
* rework I2C sensor init the goal is to only instantiate sensors that are pressend to save memory. side effacts: - easyer sensor integration (less C&P code) - nodeTelemetrySensorsMap can be removed when all devices are migrated * add missing ifdef * refactor a bunch of more sensors RAM -816 Flash -916 * fix build for t1000 * refactor more sensors RAM -192 Flash -60 * improve error handling Flash -112 * fix build * fix build * fix IndicatorSensor * fix tracker-t1000-e build not sure what magic is used but it works * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update src/modules/Telemetry/Sensor/DFRobotGravitySensor.h Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Fix --------- Co-authored-by: Ben Meadors <benmmeadors@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
68 lines
2.1 KiB
C++
68 lines
2.1 KiB
C++
/*
|
|
* Support for the ClimateGuard RadSens Dosimeter
|
|
* A fun and educational sensor for Meshtastic; not for safety critical applications.
|
|
*/
|
|
#include "configuration.h"
|
|
|
|
#if !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR
|
|
|
|
#include "../mesh/generated/meshtastic/telemetry.pb.h"
|
|
#include "CGRadSensSensor.h"
|
|
#include "TelemetrySensor.h"
|
|
#include <Wire.h>
|
|
#include <typeinfo>
|
|
|
|
CGRadSensSensor::CGRadSensSensor() : TelemetrySensor(meshtastic_TelemetrySensorType_RADSENS, "RadSens") {}
|
|
|
|
bool CGRadSensSensor::initDevice(TwoWire *bus, ScanI2C::FoundDevice *dev)
|
|
{
|
|
// Initialize the sensor following the same pattern as RCWL9620Sensor
|
|
LOG_INFO("Init sensor: %s", sensorName);
|
|
status = true;
|
|
begin(bus, dev->address.address);
|
|
initI2CSensor();
|
|
return status;
|
|
}
|
|
|
|
void CGRadSensSensor::begin(TwoWire *wire, uint8_t addr)
|
|
{
|
|
// Store the Wire and address to the sensor following the same pattern as RCWL9620Sensor
|
|
_wire = wire;
|
|
_addr = addr;
|
|
_wire->begin();
|
|
}
|
|
|
|
float CGRadSensSensor::getStaticRadiation()
|
|
{
|
|
// Read a register, following the same pattern as the RCWL9620Sensor
|
|
_wire->beginTransmission(_addr); // Transfer data to addr.
|
|
_wire->write(0x06); // Radiation intensity (static period T = 500 sec)
|
|
if (_wire->endTransmission() == 0) {
|
|
if (_wire->requestFrom(_addr, (uint8_t)3)) {
|
|
; // Request 3 bytes
|
|
uint32_t data = _wire->read();
|
|
data <<= 8;
|
|
data |= _wire->read();
|
|
data <<= 8;
|
|
data |= _wire->read();
|
|
|
|
// As per the data sheet for the RadSens
|
|
// Register 0x06 contains the reading in 0.1 * μR / h
|
|
float microRadPerHr = float(data) / 10.0;
|
|
return microRadPerHr;
|
|
}
|
|
}
|
|
return -1.0;
|
|
}
|
|
|
|
bool CGRadSensSensor::getMetrics(meshtastic_Telemetry *measurement)
|
|
{
|
|
// Store the meansurement in the the appropriate fields of the protobuf
|
|
measurement->variant.environment_metrics.has_radiation = true;
|
|
|
|
LOG_DEBUG("CGRADSENS getMetrics");
|
|
measurement->variant.environment_metrics.radiation = getStaticRadiation();
|
|
|
|
return true;
|
|
}
|
|
#endif |