Fixes on imports of Adafruit library, and ADS1x15 integration

This commit is contained in:
oscgonfer 2025-06-25 11:04:54 +02:00
parent 49b32debe4
commit cf39519c83
3 changed files with 40 additions and 15 deletions

View File

@ -22,7 +22,15 @@
#include "graphics/ScreenFonts.h"
#include <Throttle.h>
#if __has_include(<Adafruit_ADS1015.h>)
namespace graphics
{
extern void drawCommonHeader(OLEDDisplay *display, int16_t x, int16_t y, const char *titleStr);
}
#include "Sensor/nullSensor.h"
#if __has_include(<Adafruit_ADS1X15.h>)
#include "Sensor/ADS1X15Sensor.h"
ADS1X15Sensor ads1x15Sensor;
#else
@ -49,8 +57,8 @@ int32_t PowerTelemetryModule::runOnce()
without having to configure it from the PythonAPI or WebUI.
*/
// moduleConfig.telemetry.power_measurement_enabled = 1;
// moduleConfig.telemetry.power_screen_enabled = 1;
moduleConfig.telemetry.power_measurement_enabled = 1;
moduleConfig.telemetry.power_screen_enabled = 1;
// moduleConfig.telemetry.power_update_interval = 45;
if (!(moduleConfig.telemetry.power_measurement_enabled)) {
@ -83,6 +91,9 @@ int32_t PowerTelemetryModule::runOnce()
result = max17048Sensor.isInitialized() ? 0 : max17048Sensor.runOnce();
if (ads1x15Sensor.hasSensor())
result = ads1x15Sensor.isInitialized() ? 0 : ads1x15Sensor.runOnce();
if (!ads1x15Sensor.hasSensor()) {
LOG_INFO("ADS1X15 not found");
}
}
// it's possible to have this module enabled, only for displaying values on the screen.
@ -215,6 +226,7 @@ bool PowerTelemetryModule::getPowerTelemetry(meshtastic_Telemetry *m)
if (max17048Sensor.hasSensor())
valid = max17048Sensor.getMetrics(m);
if (ads1x15Sensor.hasSensor())
LOG_INFO("Getting ADS1X15 sensor");
valid = ads1x15Sensor.getMetrics(m);
#endif

View File

@ -1,11 +1,11 @@
#include "configuration.h"
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1015.h>)
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1X15.h>)
#include "../mesh/generated/meshtastic/telemetry.pb.h"
#include "ADS1X15Sensor.h"
#include "TelemetrySensor.h"
#include <Adafruit_ADS1015.h>
#include <Adafruit_ADS1X15.h>
ADS1X15Sensor::ADS1X15Sensor() : TelemetrySensor(meshtastic_TelemetrySensorType_ADS1X15, "ADS1X15") {}
@ -23,7 +23,7 @@ int32_t ADS1X15Sensor::runOnce()
void ADS1X15Sensor::setup() {}
struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch)
struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(uint8_t ch)
{
struct _ADS1X15Measurement measurement;
@ -32,7 +32,7 @@ struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch)
double voltage_range = 6.144;
// Get value with full range
uint16_t value = ads.readADC_SingleEnded(ch);
uint16_t value = ads1x15.readADC_SingleEnded(ch);
// Dynamic gain, to increase resolution of low voltage values
// If value is under 4.096v increase the gain depending on voltage
@ -72,8 +72,7 @@ struct _ADS1X15Measurement ADS1X15Sensor::getMeasurement(ads1x15_ch_t ch)
value = ads1x15.readADC_SingleEnded(ch);
}
reading = (float)value / 32768 * voltage_range;
measurement.voltage = reading;
measurement.voltage = (float)value / 32768 * voltage_range;
return measurement;
}
@ -84,7 +83,7 @@ struct _ADS1X15Measurements ADS1X15Sensor::getMeasurements()
// ADS1X15 has 4 channels starting from 0
for (int i = 0; i < 4; i++) {
measurements.measurements[i] = getMeasurement((ads1x15_ch_t)i);
measurements.measurements[i] = getMeasurement(i);
}
return measurements;

View File

@ -1,16 +1,21 @@
#include "configuration.h"
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1015.h>)
#if HAS_TELEMETRY && !MESHTASTIC_EXCLUDE_ENVIRONMENTAL_SENSOR && __has_include(<Adafruit_ADS1X15.h>)
#include "../mesh/generated/meshtastic/telemetry.pb.h"
#include "TelemetrySensor.h"
#include "VoltageSensor.h"
#include <Adafruit_ADS1015.h>
#include <Adafruit_ADS1X15.h>
class ADS1X15Sensor : public TelemetrySensor, VoltageSensor
class ADS1X15Sensor : public TelemetrySensor
{
private:
Adafruit_ADS1015 ads1x15;
Adafruit_ADS1X15 ads1x15;
// get a single measurement for a channel
struct _ADS1X15Measurement getMeasurement(uint8_t ch);
// get all measurements for all channels
struct _ADS1X15Measurements getMeasurements();
protected:
virtual void setup() override;
@ -21,4 +26,13 @@ class ADS1X15Sensor : public TelemetrySensor, VoltageSensor
virtual bool getMetrics(meshtastic_Telemetry *measurement) override;
};
struct _ADS1X15Measurement {
float voltage;
};
struct _ADS1X15Measurements {
// ADS1X15 has 4 channels
struct _ADS1X15Measurement measurements[4];
};
#endif