diff --git a/drivers/analog/analog.cpp b/drivers/analog/analog.cpp index f3179a7e..42caf012 100644 --- a/drivers/analog/analog.cpp +++ b/drivers/analog/analog.cpp @@ -2,11 +2,14 @@ namespace pimoroni { uint16_t Analog::read_raw() { + adc_select_input(pin - 26); return adc_read(); } float Analog::read_voltage() { - return ((float)adc_read() * 3.3f) / (1 << 12) / amplifier_gain; + adc_select_input(pin - 26); + float voltage = ((((float)adc_read() * 3.3f) / (1 << 12)) + offset) / amplifier_gain; + return MAX(voltage, 0.0f); } float Analog::read_current() { diff --git a/drivers/analog/analog.hpp b/drivers/analog/analog.hpp index cad26e46..7f321b0d 100644 --- a/drivers/analog/analog.hpp +++ b/drivers/analog/analog.hpp @@ -9,8 +9,8 @@ namespace pimoroni { class Analog { public: - Analog(uint pin, float amplifier_gain = 1.0f, float resistor = 0.0f) : - pin(pin), amplifier_gain(amplifier_gain), resistor(resistor) { + Analog(uint pin, float amplifier_gain = 1.0f, float resistor = 0.0f, float offset = 0.0f) : + pin(pin), amplifier_gain(amplifier_gain), resistor(resistor), offset(offset) { adc_init(); //Make sure GPIO is high-impedance, no pullups etc @@ -26,6 +26,7 @@ namespace pimoroni { uint pin; float amplifier_gain; float resistor; + float offset; }; } \ No newline at end of file